【问题标题】:Assembly always executes jar with dependencies程序集总是执行带有依赖项的 jar
【发布时间】:2011-05-03 09:26:48
【问题描述】:

您好,我创建了一个程序集来压缩项目的图像,并将它连接到我的 pom 文件中的打包阶段,这里的问题是当我执行“干净编译包”时,它正在创建我需要的 zip 文件以及一个文件-jar-with-dependencies.jar 我不想创建。我怎样才能抑制生成这个jar文件

这是我的pom

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <inherited>false</inherited>
    <configuration>
        <descriptors>
            <descriptor>
                src/main/assembly/cat_image_resources_assembly.xml
            </descriptor>
        </descriptors>
    </configuration>
    <executions>
      <execution>
        <id>cat_image_resources</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
        <configuration>
            <!-- appendAssemblyId>false</appendAssemblyId>
            <Change the name to standard name >
            <finalName>renameImages</finalName-->
        </configuration>
      </execution>
    </executions>
</plugin>

汇编文件 cat_image_resources_assembly.xml

<assembly>
<id>cat_image_resources</id>
<formats>
    <format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<baseDirectory>${artifactId}</baseDirectory>
<fileSets>
    <fileSet>
        <directory>exportedImages</directory>
        <outputDirectory/>
        <fileMode>644</fileMode>
    </fileSet>
</fileSets>
</assembly>

它正在生成以下文件

CATImageExport2-1.0-SNAPSHOT-cat_image_resources.zip(需要 5mb), CATImageExport2-1.0-SNAPSHOT-jar-with-dependencies.jar(58mb 这是我想排除生成的依赖项)

【问题讨论】:

    标签: java maven-2 maven-assembly-plugin


    【解决方案1】:

    你确定是程序集插件创建了依赖jar文件吗?

    我这么说是因为它看起来像汇编插件完全按照您指定的那样做。但是,如果没有看到更多项目的 pom.xml 文件,我不能排除在 pom.xml 文件中没有另一个插件用于项目,甚至没有父 pom.xml 文件可以为您创建依赖项 jar 文件。

    【讨论】:

    • 如果我注释掉程序集插件 maven-assembly-plugin 那么它不会生成这两个工件中的任何一个。
    • Pascal 有正确的下一步尝试。看看有效的pom。你可能继承了你不想要的东西。
    【解决方案2】:

    这里的问题是,当我执行“clean compile package”时,它正在创建我需要的 zip 文件以及我不想创建的文件 -jar-with-dependencies.jar。

    如果您使用 jar-with-dependencies 预定义描述符,通常会创建 -jar-with-dependencies.jar 文件。您提供的 sn-p 没有显示任何类似的内容并且按预期工作(在将其粘贴到测试 POM 之后):

    $ ls 目标 archive-tmp Q4068706-1.0-SNAPSHOT-cat_image_resources.zip 测试类 类 Q4068706-1.0-SNAPSHOT.jar maven-archiver 肯定报告

    仔细检查您没有从父 POM 继承插件配置(例如使用 mvn help:effective-pom),因为您提供的 XML sn-p 按预期工作。

    【讨论】:

    • 您好,感谢您的回复,我确实提供了帮助:effictive-pom 并发现 jar-with-dependencies 具有预定义的描述符,
    • maven-assembly-plugin2.2-beta-3jar-with-dependencies ${main-class}
    • @sanat:那你就有答案了 :)
    • 有没有办法可以覆盖父 poms 定义?我的意思是是否可以忽略父 pom 定义并拥有我自己的描述符,以便 jar-with-dependencies 不应该干扰我的 pom。
    【解决方案3】:

    re:“有没有一种方法可以覆盖父 pom 定义?我的意思是可以忽略父 pom 定义并拥有我自己的描述符,这样 jar-with-dependencies 就不会干扰我的 pom。”

    我过去曾在这方面摸索过,但始终无法完全按照我的意愿去做。我很确定简短的回答是“否”,但我会详细说明我的尝试。

    1. 我为具有两个执行的程序集插件创建了 pluginManagement 条目,每个执行都有唯一的 ID 和配置。然后在插件部分的程序集插件中,我添加了一个执行部分,其中只有一个执行,其 id 与我真正想要运行的执行的 id 匹配。它仍然同时运行。

    2. 我为程序集插件创建了一个 pluginManagement 条目,其中一个执行具有唯一的 ID 和配置。然后在插件部分,我为程序集插件创建了一个条目,其中包含一次执行和不同的 id 和配置。它仍然同时运行。

    3. 我为程序集插件创建了一个 pluginManagement 条目,其中一个执行具有唯一的 ID 和配置。然后在插件部分,我为程序集插件创建了一个条目,其中包含一个执行和相同的 ID,这一次指定了一个完全不同的配置。它显然将两种配置合并在一起并产生了两种配置的结果。注意:pluginManagement 部分中的配置使用了描述符条目,而 plugins 部分中的配置使用了 descriptorRef 条目。我尝试在 plugins 部分的配置中添加一个空的描述符条目,希望它会覆盖(并基本上消除)pluginManagement 部分中指定的描述符的使用,但没有这样的运气。

    我相信 maven 将始终将父插件与子插件合并,并且基本上不会覆盖任何内容,贪婪地合并匹配的标签(更多是更好的理念,因此它不会选择一个标签的子元素而不是另一个标签的子元素)。

    就哲学而言,程序集插件可以帮助您构建自定义工件(在 maven 中,每个项目都应该生成一个主要工件,不包括源分类器等),所以如果多个孩子需要使用程序集插件,你只会把它们共同的东西放在父 pom.xml 中。如果您没有所有 maven-assembly-plugin 配置/执行共有的任何东西,我认为您需要将程序集插件配置移动到每个子项目中。

    【讨论】:

      【解决方案4】:

      对于 Maven 正在执行的所有配置继承,Kevin 的回答没有什么可补充的。但是,如果您可以更改父 POM(不影响其行为),则可以选择以下选项:

      1. 在父级中,定义 元素,该元素链接到 元素中的 jar-with-dependencies 以用于“默认”。 IE。 作为插件的一部分。
      2. 在子项中,跳过“默认”(这将禁用 jar-with-dependencies)并添加您自己的 及其

      可以在这里找到一个例子:

      https://github.com/demobox/jar-with-deps-vs-spi/blob/master/pom.xml

      在那里,默认值在“with-services-handler”配置文件而不是子 POM 中被覆盖,但机制应该是相同的。

      【讨论】:

        猜你喜欢
        • 2012-04-12
        • 2021-05-25
        • 1970-01-01
        • 2019-04-01
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 2018-01-20
        • 2019-07-26
        相关资源
        最近更新 更多