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:
parent
ea48b3c250
commit
136d6cc3a5
@ -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) {
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user