Note that there are some explanatory texts on larger screens.

plurals
  1. POExcluding "provided" scope dependencies during "test" execution phase?
    primarykey
    data
    text
    <p>I'm seeing a jar with <code>provided</code> scope in my classpath during test execution. Given the definition of the <code>provided</code> scope, I would not expect that jar to appear on the classpath during any execution phase.</p> <p>I've confirmed that the scope is correct using the M2E "Dependency Hierarchy" view. I've already tried using the <code>classpathDependencyScopeExclude</code> option in <code>maven-surefire-plugin</code> to keep the dependency from showing up, and it hasn't worked:</p> <pre><code>&lt;build&gt; &lt;pluginManagement&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt; &lt;version&gt;2.14.1&lt;/version&gt; &lt;configuration&gt; &lt;!-- We always want to exclude provided deps. I'm not sure why this isn't the default. --&gt; &lt;classpathDependencyScopeExclude&gt;provided&lt;/classpathDependencyScopeExclude&gt; &lt;/configuration&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/pluginManagement&gt; &lt;/build&gt; </code></pre> <p>Here is the dependency definition in question:</p> <p><strong>Parent POM</strong>:</p> <pre><code>&lt;dependency&gt; &lt;groupId&gt;javax.ws.rs&lt;/groupId&gt; &lt;artifactId&gt;jsr311-api&lt;/artifactId&gt; &lt;version&gt;1.1.1&lt;/version&gt; &lt;/dependency&gt; </code></pre> <p><strong>Module POM</strong>:</p> <pre><code>&lt;dependency&gt; &lt;groupId&gt;javax.ws.rs&lt;/groupId&gt; &lt;artifactId&gt;jsr311-api&lt;/artifactId&gt; &lt;scope&gt;provided&lt;/scope&gt; &lt;/dependency&gt; </code></pre> <p>Is it normal that the jar is there? What can I do to keep it from showing up?</p> <p><strong>EDIT</strong>: I've run <code>mvn dependency:tree</code> on the parent POM. Here's the output for the project in question:</p> <pre><code>[INFO] ------------------------------------------------------------------------ [INFO] Building sibyl.transport.impl.http.server 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ sibyl.transport.impl.http.server --- [INFO] com.sigpwned.analytics:sibyl.transport.impl.http.server:jar:0.0.1-SNAPSHOT [INFO] +- com.sigpwned.analytics:sibyl.transport:jar:0.0.1-SNAPSHOT:compile [INFO] +- com.sigpwned.analytics:commons:jar:0.0.1-SNAPSHOT:compile [INFO] +- javax.ws.rs:jsr311-api:jar:1.1.1:provided [INFO] +- com.sun.jersey:jersey-server:jar:1.17.1:test (scope not updated to compile) [INFO] | +- asm:asm:jar:3.1:test [INFO] | \- com.sun.jersey:jersey-core:jar:1.17.1:test [INFO] +- com.sun.jersey:jersey-servlet:jar:1.17.1:compile [INFO] +- org.eclipse.jetty:jetty-servlet:jar:9.0.3.v20130506:test [INFO] | \- org.eclipse.jetty:jetty-security:jar:9.0.3.v20130506:test [INFO] | \- org.eclipse.jetty:jetty-server:jar:9.0.3.v20130506:test [INFO] | +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016:test [INFO] | +- org.eclipse.jetty:jetty-http:jar:9.0.3.v20130506:test [INFO] | | \- org.eclipse.jetty:jetty-util:jar:9.0.3.v20130506:test [INFO] | \- org.eclipse.jetty:jetty-io:jar:9.0.3.v20130506:test [INFO] +- com.sigpwned.analytics:sibyl.transport.impl.http.client:jar:0.0.1-SNAPSHOT:test [INFO] | \- org.apache.httpcomponents:httpclient:jar:4.2.5:test [INFO] | +- org.apache.httpcomponents:httpcore:jar:4.2.4:test [INFO] | +- commons-logging:commons-logging:jar:1.1.1:test [INFO] | \- commons-codec:commons-codec:jar:1.6:test [INFO] \- junit:junit:jar:4.11:test [INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test </code></pre> <p>Again, the jar with provided scope that I expect not to show up on the classpath but does is the JAX-RS spec API, shown above as <code>javax.ws.rs:jsr311-api:jar:1.1.1:provided</code>. I believe this confirms that this dependency only appears in the <code>provided</code> scope.</p> <p><strong>EDIT</strong>: If I run the test, here is the command line that gets run (from <code>ps</code>):</p> <pre><code>sigpwned 11771 0.0 1.2 4019788 100240 ?? S 10:58PM 0:05.92 /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:59974 -Dfile.encoding=UTF-8 -classpath /Users/aboothe/Documents/workspaces/w2oanalytics/sibyl.transport.impl.http.server/target/test-classes:/Users/aboothe/Documents/workspaces/w2oanalytics/sibyl.transport.impl.http.server/target/classes:/Users/aboothe/Documents/workspaces/w2oanalytics/sibyl/sibyl.transport/target/classes:/Users/aboothe/Documents/workspaces/w2oanalytics/commons/target/classes:/Users/aboothe/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar:/Users/aboothe/.m2/repository/com/sun/jersey/jersey-server/1.17.1/jersey-server-1.17.1.jar:/Users/aboothe/.m2/repository/asm/asm/3.1/asm-3.1.jar:/Users/aboothe/.m2/repository/com/sun/jersey/jersey-core/1.17.1/jersey-core-1.17.1.jar:/Users/aboothe/.m2/repository/com/sun/jersey/jersey-servlet/1.17.1/jersey-servlet-1.17.1.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/jetty-servlet/9.0.3.v20130506/jetty-servlet-9.0.3.v20130506.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/jetty-security/9.0.3.v20130506/jetty-security-9.0.3.v20130506.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/jetty-server/9.0.3.v20130506/jetty-server-9.0.3.v20130506.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/jetty-http/9.0.3.v20130506/jetty-http-9.0.3.v20130506.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/jetty-util/9.0.3.v20130506/jetty-util-9.0.3.v20130506.jar:/Users/aboothe/.m2/repository/org/eclipse/jetty/jetty-io/9.0.3.v20130506/jetty-io-9.0.3.v20130506.jar:/Users/aboothe/Documents/workspaces/w2oanalytics/sibyl.transport.impl.http.client/target/classes:/Users/aboothe/.m2/repository/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5.jar:/Users/aboothe/.m2/repository/org/apache/httpcomponents/httpcore/4.2.4/httpcore-4.2.4.jar:/Users/aboothe/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/Users/aboothe/.m2/repository/commons-codec/commons-codec/1.6/commons-codec-1.6.jar:/Users/aboothe/.m2/repository/junit/junit/4.11/junit-4.11.jar:/Users/aboothe/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/aboothe/Downloads/eclipse/configuration/org.eclipse.osgi/bundles/350/1/.cp/:/Users/aboothe/Downloads/eclipse/configuration/org.eclipse.osgi/bundles/349/1/.cp/ org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 59973 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -classNames com.sigpwned.analytics.sibyl.transport.impl.http.server.HttpServerTransportTests </code></pre> <p>If you pull out the classpath, here's what that looks like:</p> <pre><code>/Users/sigpwned/Documents/workspaces/siganalytics/sibyl.transport.impl.http.server/target/test-classes /Users/sigpwned/Documents/workspaces/siganalytics/sibyl.transport.impl.http.server/target/classes /Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport/target/classes /Users/sigpwned/Documents/workspaces/siganalytics/commons/target/classes /Users/sigpwned/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar /Users/sigpwned/.m2/repository/com/sun/jersey/jersey-server/1.17.1/jersey-server-1.17.1.jar /Users/sigpwned/.m2/repository/asm/asm/3.1/asm-3.1.jar /Users/sigpwned/.m2/repository/com/sun/jersey/jersey-core/1.17.1/jersey-core-1.17.1.jar /Users/sigpwned/.m2/repository/com/sun/jersey/jersey-servlet/1.17.1/jersey-servlet-1.17.1.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-servlet/9.0.3.v20130506/jetty-servlet-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-security/9.0.3.v20130506/jetty-security-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-server/9.0.3.v20130506/jetty-server-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-http/9.0.3.v20130506/jetty-http-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-util/9.0.3.v20130506/jetty-util-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-io/9.0.3.v20130506/jetty-io-9.0.3.v20130506.jar /Users/sigpwned/Documents/workspaces/siganalytics/sibyl.transport.impl.http.client/target/classes /Users/sigpwned/.m2/repository/org/apache/httpcomponents/httpclient/4.2.5/httpclient-4.2.5.jar /Users/sigpwned/.m2/repository/org/apache/httpcomponents/httpcore/4.2.4/httpcore-4.2.4.jar /Users/sigpwned/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar /Users/sigpwned/.m2/repository/commons-codec/commons-codec/1.6/commons-codec-1.6.jar /Users/sigpwned/.m2/repository/junit/junit/4.11/junit-4.11.jar /Users/sigpwned/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar /Users/sigpwned/Downloads/eclipse/configuration/org.eclipse.osgi/bundles/350/1/.cp/ /Users/sigpwned/Downloads/eclipse/configuration/org.eclipse.osgi/bundles/349/1/.cp/ </code></pre> <p><strong>EDIT</strong>: After investigating the <code>classpathDependencyScopeExclude</code> documentation, I determined that you can only exclude <code>compile</code>, <code>runtime</code>, and <code>test</code> dependencies, not <code>provided</code>. This explains why that functionality doesn't work. After trying the suggestion from @hello below, I've determined that <code>classpathDependencyExclude</code> works when running directly with maven. Here's the classpath that I ripped out of the surefire jar's MANIFEST:</p> <pre><code> file:/Users/sigpwned/.m2/repository/org/apache/maven/surefire/surefire-booter/2.14.1/surefire-booter-2.14.1.jar file:/Users/sigpwned/.m2/repository/org/apache/maven/surefire/surefire-api/2.14.1/surefire-api-2.14.1.jar file:/Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport.impl.http.server/target/test-classes/ file:/Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport.impl.http.server/target/classes/ file:/Users/sigpwned/.m2/repository/com/siggroup/analytics/sibyl.transport/0.0.1-SNAPSHOT/sibyl.transport-0.0.1-SNAPSHOT.jar file:/Users/sigpwned/.m2/repository/com/siggroup/analytics/commons/0.0.1-SNAPSHOT/commons-0.0.1-SNAPSHOT.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-server/9.0.3.v20130506/jetty-server-9.0.3.v20130506.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-http/9.0.3.v20130506/jetty-http-9.0.3.v20130506.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-util/9.0.3.v20130506/jetty-util-9.0.3.v20130506.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-io/9.0.3.v20130506/jetty-io-9.0.3.v20130506.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-servlet/9.0.3.v20130506/jetty-servlet-9.0.3.v20130506.jar file:/Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-security/9.0.3.v20130506/jetty-security-9.0.3.v20130506.jar file:/Users/sigpwned/.m2/repository/com/sun/jersey/jersey-server/1.17.1/jersey-server-1.17.1.jar file:/Users/sigpwned/.m2/repository/asm/asm/3.1/asm-3.1.jar file:/Users/sigpwned/.m2/repository/com/sun/jersey/jersey-core/1.17.1/jersey-core-1.17.1.jar file:/Users/sigpwned/.m2/repository/com/sun/jersey/jersey-servlet/1.17.1/jersey-servlet-1.17.1.jar file:/Users/sigpwned/.m2/repository/com/siggroup/analytics/sibyl.transport.impl.http.client/0.0.1-SNAPSHOT/sibyl.transport.impl.http.client-0.0.1-SNAPSHOT.jar file:/Users/sigpwned/.m2/repository/org/apache/httpcomponents/httpclient/4.2.4/httpclient-4.2.4.jar file:/Users/sigpwned/.m2/repository/org/apache/httpcomponents/httpcore/4.2.4/httpcore-4.2.4.jar file:/Users/sigpwned/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar file:/Users/sigpwned/.m2/repository/commons-codec/commons-codec/1.6/commons-codec-1.6.jar file:/Users/sigpwned/.m2/repository/com/siggroup/analytics/sibyl.transport/0.0.1-SNAPSHOT/sibyl.transport-0.0.1-SNAPSHOT-tests.jar file:/Users/sigpwned/.m2/repository/junit/junit/4.11/junit-4.11.jar file:/Users/sigpwned/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar </code></pre> <p>Notice that jsr311-api.jar is not present. Success! Here's the configuration that worked:</p> <pre><code>&lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt; &lt;version&gt;${maven-surefire-plugin.version}&lt;/version&gt; &lt;configuration&gt; &lt;!-- We never want to include these API deps on an execution classpath. I would think this is how the "provided" scope works - just compile against the jar, and then I'll bring it myself at execution time - but provided is only excluded during the runtime phase, not the testing phase. So, we have to exclude all our API JARs by hand. --&gt; &lt;classpathDependencyExcludes&gt; &lt;classpathDependencyExclude&gt;javax.ws.rs:jsr311-api&lt;/classpathDependencyExclude&gt; &lt;/classpathDependencyExcludes&gt; &lt;includes&gt; &lt;include&gt;**/*Tests.*&lt;/include&gt; &lt;/includes&gt; &lt;/configuration&gt; &lt;/plugin&gt; </code></pre> <p>However, this solution does <em>not</em> seem to work on M2E. Here's the classpath I've pulled out from a <code>ps</code> during test execution using M2E:</p> <pre><code> /Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport.impl.http.server/target/test-classes /Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport.impl.http.server/target/classes /Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport/target/classes /Users/sigpwned/Documents/workspaces/siganalytics/commons/target/classes &gt; /Users/sigpwned/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-server/9.0.3.v20130506/jetty-server-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/orbit/javax.servlet/3.0.0.v201112011016/javax.servlet-3.0.0.v201112011016.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-http/9.0.3.v20130506/jetty-http-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-util/9.0.3.v20130506/jetty-util-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-io/9.0.3.v20130506/jetty-io-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-servlet/9.0.3.v20130506/jetty-servlet-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/org/eclipse/jetty/jetty-security/9.0.3.v20130506/jetty-security-9.0.3.v20130506.jar /Users/sigpwned/.m2/repository/com/sun/jersey/jersey-server/1.17.1/jersey-server-1.17.1.jar /Users/sigpwned/.m2/repository/asm/asm/3.1/asm-3.1.jar /Users/sigpwned/.m2/repository/com/sun/jersey/jersey-core/1.17.1/jersey-core-1.17.1.jar /Users/sigpwned/.m2/repository/com/sun/jersey/jersey-servlet/1.17.1/jersey-servlet-1.17.1.jar /Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport.impl.http.client/target/classes /Users/sigpwned/.m2/repository/org/apache/httpcomponents/httpclient/4.2.4/httpclient-4.2.4.jar /Users/sigpwned/.m2/repository/org/apache/httpcomponents/httpcore/4.2.4/httpcore-4.2.4.jar /Users/sigpwned/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar /Users/sigpwned/.m2/repository/commons-codec/commons-codec/1.6/commons-codec-1.6.jar /Users/sigpwned/Documents/workspaces/siganalytics/sibyl/sibyl.transport/target/test-classes /Users/sigpwned/.m2/repository/junit/junit/4.11/junit-4.11.jar /Users/sigpwned/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar /Users/sigpwned/Downloads/eclipse/configuration/org.eclipse.osgi/bundles/350/1/.cp/ /Users/sigpwned/Downloads/eclipse/configuration/org.eclipse.osgi/bundles/349/1/.cp/ </code></pre> <p>Unfortunately, jsr311-api.jar is still there. This leads me to believe that this question is answered (with that answer being "use <code>classpathDependencyExcludes</code>"), but there's a bug in M2E. I ran "Check for Updates" in Eclipse and found no update for M2E, so I should be running the latest stable release. I'll file a bug on M2E and update with the issue here so anyone who finds this issue can track.</p> <p><strong>EDIT</strong>: This issue was <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=406486" rel="noreferrer">already raised</a> with M2E, and the answer appears to be "Surefire integration is outside the scope of M2E at this time." Not encouraging. :/</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload