我需要基本上完成以下任务:
provided
的依赖项。我似乎无法完成第二部分。有没有更好的方法来做到这一点,而不是我在下面这样做?我实际上是将这些JAR部署到服务器上的lib目录中。不幸的是,下面的代码包括所有JAR,甚至包括provided
个JAR,但不包括项目输出JAR。我应该使用不同的插件吗?
<?xml version="1.0"?>
<project>
...
<dependencies>
<dependency>
<groupId>com.provided</groupId>
<artifactId>provided-lib</artifactId>
<version>1.2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>/hello</outputDirectory>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
答案 0 :(得分:34)
为防止插件收集提供的依赖关系,您可以使用@Raghuram解决方案(+1为此)。我还尝试跳过 test 范围内的依赖关系,发现issue无法做到这一点很简单 - 因为 test 意味着'一切'在插件语义中。
因此,排除提供和测试范围的解决方案是includeScope 运行时。
<includeScope>runtime</includeScope>
收集依赖项后,您可以将带有maven-antrun-plugin的项目jar复制到目标目录,例如:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${java.io.tmpdir}/test</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<tasks>
<copy
file="${build.directory}/${project.artifactId}-${project.version}.jar"
todir="${java.io.tmpdir}/test" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
我不知道任何其他解决方案 - 除了创建一个新的 pom-dist.xml (也许是<packaging>pom</packaging>
),它只保存对您的库的依赖并收集所有传递依赖项独占测试/提供范围。如果您不想提供全新的项目,可以使用mvn -f pom-dist.xml package
执行。
答案 1 :(得分:9)
根据记录here,您可以尝试设置excludeScope
参数,以排除provided
范围内的家属。
<excludeScope>provided</excludeScope>
对于不包括当前项目jar的插件,我想这是设计的 您可以创建一个单独的maven项目来完成这项工作。
答案 2 :(得分:0)
加我的两分钱。
将<excludeScope>provided</excludeScope>
置于执行中不起作用。
要排除提供的jar,请将元素放在执行之外:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<excludeScope>provided</excludeScope>
</configuration>
</plugin>
命令:mvn dependency:copy-dependencies
。
将罐子复制到target/dependency
。