程序集始终执行带有依赖项的jar

时间:2010-11-01 12:08:38

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

您好我创建了一个程序集来压缩项目的图像,我把它挂钩到我的pom文件中的包阶段,这里的问题是当我执行“clean compile package”时它正在创建我需要的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这是依赖项,我想排除生成)

4 个答案:

答案 0 :(得分:1)

  

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

如果使用jar-with-dependencies预定义描述符,通常会创建-jar-with-dependencies.jar文件。您提供的代码段不显示任何类似内容并按预期工作(在测试POM中粘贴后):

$ ls target
archive-tmp     Q4068706-1.0-SNAPSHOT-cat_image_resources.zip  test-classes
classes         Q4068706-1.0-SNAPSHOT.jar
maven-archiver  surefire-reports

仔细检查您是否未从父POM继承插件配置(例如使用mvn help:effective-pom),因为您提供的XML代码段按预期工作。

答案 1 :(得分:0)

你确定它是组件插件创建依赖jar文件吗?

我之所以这么说是因为看起来装配插件完全按照您的指定进行。但是,如果没有看到更多项目的pom.xml文件,我不能排除项目的pom.xml文件中没有其他插件,甚至可能为您创建依赖项jar文件的父pom.xml文件。

答案 2 :(得分:0)

re:“有没有办法可以覆盖父poms定义?我的意思是有可能忽略父pom定义并拥有自己的描述符,以便jar-with-dependencies不应该干扰我的pom。”

过去我曾经有过这样的事情,但是我可能永远都不会让maven做我想做的事。我很确定简短的回答是“不”,但我会详细说明我的尝试。

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

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

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

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

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

答案 3 :(得分:0)

对于Maven正在做的所有配置继承的回答,并没有多少。但是,如果可以更改父POM(不影响其行为),则可以使用以下选项:

  1. 在父级中,定义&lt; descriptorRefs&gt;在&lt; configuration&gt;中链接到jar-with-dependencies的元素'default'&lt; execution&gt;的元素。即作为&lt; configuration&gt;的一部分插件。
  2. 在孩子中,跳过'默认'&lt; execution&gt; (这将使依赖jar的东西变得麻烦)并添加你自己的&lt; execution&gt;及其&lt; configuration&gt;。
  3. 这方面的一个例子可以在这里找到:

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

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