Original question here:
http://stackoverflow.com/questions/28181602/whats-the-difference-between-webappclassloader-and-standardjarscanner
I'm able to run my team's webapp on my local machine using the
tomcat7-maven-plugin. Unfortunately when I attempt to do the same on the build
server it breaks. This is a blocking issue for our team, but none of us are
able to figure it out. Nobody on Stack Overflow has been able to help either.
Here is the tomcat7-maven-plugin configuration in our project:
<profiles>
<!-- Version 2.2 of the Tomcat7 plugin does not support skip (version 2.3
purportedly will). As an alternative, we will only include the Tomcat7
plugin
and its goals in this profile which is activated by our own parameter.
Once
skip is supported we can delete this profile and move the
plugin/executions
to the main plugin category for this pom file. -->
<profile>
<id>start-tomcat-for-integration-tests</id>
<activation>
<property>
<name>!${skipTomcat}</name>
</property>
</activation>
<build>
<plugins>
<!-- We use this plugin to launch Tomcat and locally host the pages
we just built so that we can run integration tests against them.
Note that
configuration for this plugin is stored inside the project
itself under
src/test/resources/com/MyCompany/MyOrg/MyProject/ui/automation/tomcat7/conf
and does not require additional installation or configuration of
the actual
Tomcat application. This is done to minimize configuration
efforts and avoid
interfering with normal Tomcat operations. -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<ajpPort>8009</ajpPort>
<backgroundProcessorDelay>2</backgroundProcessorDelay>
<classLoaderClass>org.apache.catalina.loader.WebappClassLoader</classLoaderClass>
<configurationDir>${basedir}/src/test/resources/com/MyCompany/MyOrg/MyProject/ui/automation/tomcat7</configurationDir>
<contextFile>${basedir}/src/test/resources/com/MyCompany/MyOrg/MyProject/ui/automation/tomcat7/conf/context.xml</contextFile>
<contextReloadable>false</contextReloadable>
<fork>false</fork>
<hostName>localhost</hostName>
<httpsPort>8443</httpsPort>
<ignorePackaging>false</ignorePackaging>
<jarScanAllDirectories>true</jarScanAllDirectories>
<addWarDependenciesInClassloader>true</addWarDependenciesInClassloader>
<path>/contentmain</path>
<port>8080</port>
<serverXml>${basedir}/src/test/resources/com/MyCompany/MyOrg/MyProject/ui/automation/tomcat7/conf/server.xml</serverXml>
<!-- NOTE: 'skip' will not be implemented for Tomcat7 plugin
until
the 2.3 release. This is a placeholder. -->
<skip>${skipTomcat}</skip>
<tomcatUsers>${basedir}/src/test/resources/com/MyCompany/MyOrg/MyProject/ui/automation/tomcat7/conf/tomcat-users.xml</tomcatUsers>
<tomcatWebXml>${basedir}/src/test/resources/com/MyCompany/MyOrg/MyProject/ui/automation/tomcat7/conf/web.xml</tomcatWebXml>
<useNaming>true</useNaming>
<useTestClasspath>true</useTestClasspath>
<update>true</update>
<warDirectory>${original.build.directory}/${original.build.finalName}</warDirectory>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-util</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-coyote</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-dbcp</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jsp-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jasper-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-el-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-tribes</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-catalina-ha</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-annotations-api</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-log4j</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft</groupId>
<artifactId>sqljdbc</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>start-tomcat</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run-war-only</goal>
</goals>
<configuration>
<fork>true</fork>
</configuration>
</execution>
<execution>
<id>stop-tomcat</id>
<phase>post-integration-test</phase>
<goals>
<goal>shutdown</goal>
</goals>
<configuration>
<skip>${keepTomcatRunning}</skip>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
You may note that the classLoaderClass parameter does not appear to do anything
here. I've also noticed that the addWarDependenciesInClassLoader parameter
does not appear to be supported by the run-war-only goal (I'm not sure if this
would help or not).
Worth noting: All of the JAR files which Tomcat can't find exist on the server
at the exact location where it's claiming it can't find them.
Would somebody mind explaining why this plugin would use the StandardJarScanner
on the build server instead of the WebappClassLoader that gets used on my
machine?
Thanks,
-Alex