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:
@@ -206,27 +206,10 @@ public final class GerritLauncher {
|
|||||||
final ZipEntry ze = e.nextElement();
|
final ZipEntry ze = e.nextElement();
|
||||||
if (ze.isDirectory()) {
|
if (ze.isDirectory()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
} else if (ze.getName().startsWith("WEB-INF/lib/")) {
|
||||||
|
extractJar(zf, ze, jars);
|
||||||
if (ze.getName().startsWith("WEB-INF/lib/")) {
|
} else if (ze.getName().startsWith("WEB-INF/pgm-lib/")) {
|
||||||
String name = ze.getName().substring("WEB-INF/lib/".length());
|
extractJar(zf, ze, jars);
|
||||||
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());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
@@ -261,6 +244,31 @@ public final class GerritLauncher {
|
|||||||
parent);
|
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,
|
private static void move(SortedMap<String, URL> jars,
|
||||||
String prefix,
|
String prefix,
|
||||||
List<URL> extapi) {
|
List<URL> extapi) {
|
||||||
|
@@ -40,6 +40,12 @@ limitations under the License.
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat</groupId>
|
||||||
|
<artifactId>tomcat-servlet-api</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.gerrit</groupId>
|
<groupId>com.google.gerrit</groupId>
|
||||||
<artifactId>gerrit-gwtui</artifactId>
|
<artifactId>gerrit-gwtui</artifactId>
|
||||||
@@ -99,6 +105,18 @@ limitations under the License.
|
|||||||
<groupId>com.google.gerrit</groupId>
|
<groupId>com.google.gerrit</groupId>
|
||||||
<artifactId>gerrit-pgm</artifactId>
|
<artifactId>gerrit-pgm</artifactId>
|
||||||
<version>${project.version}</version>
|
<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>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
@@ -133,10 +151,47 @@ limitations under the License.
|
|||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</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>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
<executions>
|
<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>
|
<execution>
|
||||||
<id>copy-license</id>
|
<id>copy-license</id>
|
||||||
<phase>process-classes</phase>
|
<phase>process-classes</phase>
|
||||||
|
2
pom.xml
2
pom.xml
@@ -371,7 +371,7 @@ limitations under the License.
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-dependency-plugin</artifactId>
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
<version>2.1</version>
|
<version>2.5.1</version>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
|
Reference in New Issue
Block a user