Define gerrit-plugin-api as a subset API

This is a new JAR produced by the build that contains almost all of
the code that the corresponding WAR contains at runtime. This permits
plugin authors to compile against this single interface JAR, and then
load their plugin into a running server that uses the real WAR.

Having the API be a single JAR simplifies plugin development, Maven
users can depend on this single JAR using the provided scope. Other
IDE users can just make a new Java project and add this single JAR
as the only dependency.

Change-Id: Ie045ec4202d44b78b75ccb4af000e13c1e7378ce
This commit is contained in:
Shawn O. Pearce
2012-05-07 14:41:01 -07:00
committed by Nasser Grainawi
parent 8909b5cf59
commit 980efdb376
4 changed files with 155 additions and 1 deletions

6
gerrit-plugin-api/.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
/target
/.classpath
/.project
/.settings/org.maven.ide.eclipse.prefs
/.settings/org.eclipse.m2e.core.prefs
/gerrit-pluginapi-ssh.iml

101
gerrit-plugin-api/pom.xml Normal file
View File

@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2012 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-parent</artifactId>
<version>2.5-SNAPSHOT</version>
</parent>
<artifactId>gerrit-plugin-api</artifactId>
<name>Gerrit Code Review - Plugin API</name>
<description>
API for tightly coupled plugins to compile against
</description>
<dependencies>
<dependency>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-sshd</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<createSourcesJar>true</createSourcesJar>
<artifactSet>
<excludes>
<exclude>gwtexpui:gwtexpui</exclude>
<exclude>gwtjsonrpc:gwtjsonrpc</exclude>
<exclude>com.google.gerrit:gerrit-ehcache</exclude>
<exclude>com.google.gerrit:gerrit-prettify</exclude>
<exclude>com.google.gerrit:gerrit-patch-commonsnet</exclude>
<exclude>com.google.gerrit:gerrit-patch-jgit</exclude>
<exclude>com.google.gerrit:gerrit-util-ssl</exclude>
<exclude>com.google.gerrit:juniversalchardet</exclude>
<exclude>com.googlecode.prolog-cafe:PrologCafe</exclude>
<exclude>org.slf4j:slf4j-log4j12</exclude>
<exclude>log4j:log4j</exclude>
<exclude>commons-collections:commons-collections</exclude>
<exclude>commons-codec:commons-codec</exclude>
<exclude>commons-dbcp:commons-dbcp</exclude>
<exclude>commons-lang:commons-lang</exclude>
<exclude>commons-net:commons-net</exclude>
<exclude>commons-pool:commons-pool</exclude>
<exclude>asm:asm</exclude>
<exclude>eu.medsea.mimeutil:mime-util</exclude>
<exclude>net.sf.ehcache:ehcache-core</exclude>
<exclude>org.antlr:antlr</exclude>
<exclude>org.antlr:antlr-runtime</exclude>
<exclude>org.apache.mina:mina-core</exclude>
<exclude>oro:oro</exclude>
</excludes>
</artifactSet>
<filters>
<filter>
<artifact>com.google.gerrit:gerrit-server</artifact>
<excludes>
<exclude>gerrit/**</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

12
pom.xml
View File

@@ -87,6 +87,8 @@ limitations under the License.
<module>gerrit-gwtdebug</module>
<module>gerrit-war</module>
<module>gerrit-plugin-api</module>
<module>gerrit-gwtui</module>
</modules>
@@ -333,7 +335,7 @@ limitations under the License.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<version>1.6</version>
</plugin>
<plugin>
@@ -425,6 +427,14 @@ limitations under the License.
</configuration>
</plugin>
</plugins>
<extensions>
<extension>
<groupId>net.anzix.aws</groupId>
<artifactId>s3-maven-wagon</artifactId>
<version>3.2</version>
</extension>
</extensions>
</build>
<dependencies>

37
tools/deploy_plugin_api.sh Executable file
View File

@@ -0,0 +1,37 @@
#!/bin/sh
SRC=$(ls gerrit-plugin-api/target/gerrit-plugin-api-*-sources.jar)
VER=${SRC#gerrit-plugin-api/target/gerrit-plugin-api-}
VER=${VER%-sources.jar}
JAR=gerrit-plugin-api/target/gerrit-plugin-api-$VER.jar
type=release
case $VER in
*-SNAPSHOT)
echo >&2 "fatal: Cannot deploy $VER"
echo >&2 " Use ./tools/version.sh --release && mvn clean package"
exit 1
;;
*-[0-9]*-g*) type=snapshot ;;
esac
URL=s3://gerrit-api@commondatastorage.googleapis.com/$type
echo "Deploying gerrit-plugin-api $VER to $URL"
mvn deploy:deploy-file \
-DgroupId=com.google.gerrit \
-DartifactId=gerrit-plugin-api \
-Dversion=$VER \
-Dpackaging=jar \
-Dfile=$JAR \
-DrepositoryId=gerrit-api-repository \
-Durl=$URL
mvn deploy:deploy-file \
-DgroupId=com.google.gerrit \
-DartifactId=gerrit-plugin-api \
-Dversion=$VER \
-Dpackaging=java-source \
-Dfile=$SRC \
-Djava-source=false \
-DrepositoryId=gerrit-api-repository \
-Durl=$URL