您好我创建了一个程序集来压缩项目的图像,我把它挂钩到我的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这是依赖项,我想排除生成)
答案 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做我想做的事。我很确定简短的回答是“不”,但我会详细说明我的尝试。
我为程序集插件创建了pluginManagement条目,其中包含两个执行,每个执行都有唯一的ID和配置。然后在插件部分的程序集插件中,我添加了一个执行部分,其中只有一个执行,其id与我真正想要运行的执行的id相匹配。它仍然运行。
我为程序集插件创建了一个pluginManagement条目,其中一个执行具有唯一的id和配置。然后在插件部分中,我为程序集插件创建了一个条目,其中包含一个执行和一个不同的id和配置。它仍然运行。
我为程序集插件创建了一个pluginManagement条目,其中一个执行具有唯一的id和配置。然后在插件部分中,我为程序集插件创建了一个条目,其中包含一个执行和相同的id,这次指定了完全不同的配置。它显然将两种配置合并在一起并产生了两种配置的结果。注意:pluginManagement部分中的配置使用了描述符条目,而插件部分中的配置使用了descriptorRef条目。我尝试在插件部分的配置中添加一个空描述符条目,希望它会覆盖(并且基本上消除)pluginManagement部分中指定的描述符的使用,但没有这样的运气。
我相信maven将始终将父插件与子插件合并,并且基本上不会覆盖任何内容,贪婪地合并匹配的标签(更多是更好的哲学,因此它不会选择一个标签的子元素超过另一个的子元素)。
就哲学而言,程序集插件可以帮助你构建自定义工件(并且在maven中每个项目应该生成一个主要工件,不计算源分类器等),所以如果多个孩子需要使用汇编插件你只会在父pom中放入所有这些共同点。如果你没有任何maven-assembly-plugin配置/执行通用的东西,我认为你需要将程序集插件配置移动到每个子项目。
答案 3 :(得分:0)
对于Maven正在做的所有配置继承的回答,并没有多少。但是,如果可以更改父POM(不影响其行为),则可以使用以下选项:
这方面的一个例子可以在这里找到:
https://github.com/demobox/jar-with-deps-vs-spi/blob/master/pom.xml
在那里,默认值在'with-services-handler'配置文件而不是子POM中被覆盖,但机制应该是相同的。