Remove servlet-api from WAR/lib

It is wrong to include the servlet API in a WAR's WEB-INF/lib
directory. This confuses some servlet containers who refuse to
load the Gerrit WAR. Instead package the Jetty runtime and the
servlet API in a new WEB-INF/pgm-lib directory.

Change-Id: Ic5fe14c735e781b2d78d2fa8d0d403a08b7ee21f
This commit is contained in:
Shawn O. Pearce 2012-10-21 21:15:36 -07:00
parent ea48b3c250
commit 136d6cc3a5
3 changed files with 85 additions and 22 deletions

View File

@ -206,27 +206,10 @@ public final class GerritLauncher {
final ZipEntry ze = e.nextElement();
if (ze.isDirectory()) {
continue;
}
if (ze.getName().startsWith("WEB-INF/lib/")) {
String name = ze.getName().substring("WEB-INF/lib/".length());
final File tmp = createTempFile(safeName(ze), ".jar");
final FileOutputStream out = new FileOutputStream(tmp);
try {
final InputStream in = zf.getInputStream(ze);
try {
final byte[] buf = new byte[4096];
int n;
while ((n = in.read(buf, 0, buf.length)) > 0) {
out.write(buf, 0, n);
}
} finally {
in.close();
}
} finally {
out.close();
}
jars.put(name, tmp.toURI().toURL());
} else if (ze.getName().startsWith("WEB-INF/lib/")) {
extractJar(zf, ze, jars);
} else if (ze.getName().startsWith("WEB-INF/pgm-lib/")) {
extractJar(zf, ze, jars);
}
}
} finally {
@ -261,6 +244,31 @@ public final class GerritLauncher {
parent);
}
private static void extractJar(ZipFile zf, ZipEntry ze,
SortedMap<String, URL> jars) throws IOException {
File tmp = createTempFile(safeName(ze), ".jar");
FileOutputStream out = new FileOutputStream(tmp);
try {
InputStream in = zf.getInputStream(ze);
try {
byte[] buf = new byte[4096];
int n;
while ((n = in.read(buf, 0, buf.length)) > 0) {
out.write(buf, 0, n);
}
} finally {
in.close();
}
} finally {
out.close();
}
String name = ze.getName();
jars.put(
name.substring(name.lastIndexOf('/'), name.length()),
tmp.toURI().toURL());
}
private static void move(SortedMap<String, URL> jars,
String prefix,
List<URL> extapi) {

View File

@ -40,6 +40,12 @@ limitations under the License.
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-gwtui</artifactId>
@ -99,6 +105,18 @@ limitations under the License.
<groupId>com.google.gerrit</groupId>
<artifactId>gerrit-pgm</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
@ -133,10 +151,47 @@ limitations under the License.
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-servlet-api</id>
<configuration>
<includeGroupIds>org.apache.tomcat,org.eclipse.jetty</includeGroupIds>
<excludeArtifactIds>servlet-api</excludeArtifactIds>
</configuration>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>copy-servlet-api</id>
<phase>process-classes</phase>
<configuration>
<target>
<property name="src" location="${project.build.directory}/dependency" />
<property name="dst" location="${project.build.directory}/${project.build.finalName}/WEB-INF/pgm-lib" />
<mkdir dir="${dst}" />
<copy overwrite="true" todir="${dst}">
<fileset dir="${src}">
<include name="*.jar" />
</fileset>
</copy>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
<execution>
<id>copy-license</id>
<phase>process-classes</phase>

View File

@ -371,7 +371,7 @@ limitations under the License.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<version>2.5.1</version>
</plugin>
<plugin>