还有一个Maven汇编插件排除问题

还有一个Maven汇编插件排除问题,maven,Maven,我的目标是创建一个带有依赖项的jar,但排除一些依赖项。更广泛的上下文是——我有一个项目,我想从中生成一个服务器jar和一个客户端jar。客户端jar将只使用服务器jar包的一小部分。生成两个jar没有问题。问题在于排斥 所以为了排除故障,我把所有的东西都减到了最低限度,但我无法让它正常工作 我有一个pom,它引用带有排除的程序集XML。以下是pom: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m

我的目标是创建一个带有依赖项的jar,但排除一些依赖项。更广泛的上下文是——我有一个项目,我想从中生成一个服务器jar和一个客户端jar。客户端jar将只使用服务器jar包的一小部分。生成两个jar没有问题。问题在于排斥

所以为了排除故障,我把所有的东西都减到了最低限度,但我无法让它正常工作

我有一个pom,它引用带有排除的程序集XML。以下是pom:

<?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