8

我有以下配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.6</version>
  <executions>
      <execution>
          <id>analyze</id>
          <goals>
              <goal>analyze-only</goal>
          </goals>
          <configuration>
              <failOnWarning>false</failOnWarning>
          </configuration>
      </execution>
      <!--Copy the dependencies so ant build has the same versions-->
      <execution>
          <id>copy-dependencies</id>
          <phase>package</phase>
          <goals>
              <goal>copy-dependencies</goal>
          </goals>
          <configuration>
              <outputDirectory>${project.basedir}/lib</outputDirectory>
              <overWriteIfNewer>true</overWriteIfNewer>
              <stripVersion>true</stripVersion>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
              <excludeTransitive>false</excludeTransitive>
          </configuration>
      </execution>
  </executions>
</plugin>

上述配置将所有内容转储到同一文件夹中。我尝试通过添加测试配置来排除测试范围,但出现错误:

无法在项目 pcgen 上执行目标 org.apache.maven.plugins:maven-dependency-plugin:2.6:copy-dependencies (copy-dependencies):无法排除测试范围,这将排除所有内容。

有没有办法将测试依赖项与其他依赖项分开,以便我可以复制到不同的文件夹?

4

2 回答 2

8

I tried excluding the test scope by adding the test configuration but gives an error

I just stumbled across this, probably for very different reasons, but I think I found us both the answer. Try this, for example. You'll need pom.xml in the current directory, of course.

mvn dependency:copy-dependencies \
-DincludeScope=runtime \
-DexcludeScope=provided \
-DoutputDirectory=target/war/WEB-INF/lib

A huge belated thanks to Brian Fox, who writes on Maven Dependency Plugin Issue #128:

You shouldn't ever need to include or exclude two scopes at the same time because they are comprised of each other. The default is to include test scope, which includes everything. If you don't want any test dependencies or provided dependencies, then include runtime and exclude provided.

The scopes being interpreted are the scopes as maven sees them, not as specified in the pom. So the "test" scope includes everything, runtime includes compile but not provided etc.

In May 2013, the includeScope documentation was updated to:

/**
  * Scope to include. An Empty string indicates all scopes (default).
  * The scopes being interpreted are the scopes as
  * Maven sees them, not as specified in the pom. In summary:
  * <ul>
  * <li><code>runtime</code> scope gives runtime and compile dependencies,</li>
  * <li><code>compile</code> scope gives compile, provided, and system dependencies,</li>
  * <li><code>test</code> (default) scope gives all dependencies,</li>
  * <li><code>provided</code> scope just gives provided dependencies,</li>
  * <li><code>system</code> scope just gives system dependencies.</li>
  * </ul>
  * 
  * @since 2.0
  */
 @Parameter( property = "includeScope", defaultValue = "" )
 protected String includeScope;
于 2013-12-02T06:15:50.213 回答
0

确实使用includeScope,测试范围包括每个范围,这就是失败的原因。

<includeScope>runtime</includeScope>
于 2014-01-23T00:11:28.187 回答