还有一个Maven汇编插件排除问题
我的目标是创建一个带有依赖项的jar,但排除一些依赖项。更广泛的上下文是——我有一个项目,我想从中生成一个服务器jar和一个客户端jar。客户端jar将只使用服务器jar包的一小部分。生成两个jar没有问题。问题在于排斥 所以为了排除故障,我把所有的东西都减到了最低限度,但我无法让它正常工作 我有一个pom,它引用带有排除的程序集XML。以下是pom:还有一个Maven汇编插件排除问题,maven,Maven,我的目标是创建一个带有依赖项的jar,但排除一些依赖项。更广泛的上下文是——我有一个项目,我想从中生成一个服务器jar和一个客户端jar。客户端jar将只使用服务器jar包的一小部分。生成两个jar没有问题。问题在于排斥 所以为了排除故障,我把所有的东西都减到了最低限度,但我无法让它正常工作 我有一个pom,它引用带有排除的程序集XML。以下是pom: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.me</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<properties>
<jme3_g>org.jmonkeyengine</jme3_g>
<jme3_v>3.2.0-stable</jme3_v>
</properties>
<dependencies>
<dependency>
<groupId>${jme3_g}</groupId>
<artifactId>jme3-core</artifactId>
<version>${jme3_v}</version>
<!--scope>provided</scope-->
</dependency>
</dependencies>
<repositories>
<!-- JME -->
<repository>
<id>jcenter</id>
<url>https://jcenter.bintray.com</url>
</repository>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>client</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
this.is.just.a.Pom
</mainClass>
</manifest>
</archive>
<descriptors>
<descriptor>jar-with-deps-with-exclude.xml</descriptor>
</descriptors>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>client</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
然后:mvn清洁包
注意maven命令的以下输出:
...
[INFO] Reading assembly descriptor: jar-with-deps-with-exclude.xml
[WARNING] The following patterns were never triggered in this artifact exclusion filter:
o 'com.foo:bar'
...
我在中放置了一个排除项,但没有找到任何东西来验证Maven是否成功地处理了排除项。它抱怨com.foo:bar,但没有抱怨org.jmonkeyengine:jme3核心
当maven完成时:
$ jar tf target/client.jar | grep jme | wc -l
825
但是如果我修改POM并将JME范围更改为“提供”,那么在mvn clean package
之后:
$ jar tf target/client.jar | grep jme | wc -l
0
因此,在我看来,排除应该具有不包括JME工件的效果。我不确定如何继续,因为这似乎是依赖排除的基本用例。非常感谢您的帮助。从同一个项目中创建两个不同的工件通常不是一个好主意。相反,我将构建一个多模块项目,其中包含一个
客户机
和一个服务器
模块(以及两者都使用的util
模块)。然后,您可以轻松地创建两个可执行JAR,而无需任何麻烦。我以为我有99%的时间用这种方法,然后最后一件作品出现了如此令人沮丧的放弃我所拥有的…不要遵循沉没的成本谬论。。。找到更好的东西总是好的。
$ jar tf target/client.jar | grep jme | wc -l
825
$ jar tf target/client.jar | grep jme | wc -l
0