避免 maven-jar 的最佳方法是啥?
Posted
技术标签:
【中文标题】避免 maven-jar 的最佳方法是啥?【英文标题】:What is the best way to avoid maven-jar?避免 maven-jar 的最佳方法是什么? 【发布时间】:2011-01-12 10:10:12 【问题描述】:我正在使用不同的插件 (ant4eclipse) 来压缩我的文件。避免执行 maven-jar 插件的最佳方法是什么?
我试图删除<plugin>maven-jar-plugin</plugin>
我试过<exclude> ** / * < / exclude>
我试过<skip>true</skip>
没有成功
【问题讨论】:
***.com/questions/12809559/… 【参考方案1】:在 Maven 3.0.x(我试过 3.0.2)中,您可以通过将 default-jar
执行绑定到不存在的阶段来禁用 maven-jar-plugin
,如 @bmargulies suggested。不幸的是,这在 2.2.1 中不起作用,但您可以通过为 default-jar
执行设置替代 <finalName>
和 <classifier>
来防止它干扰您自己的 jar;它仍然会创建一个 jar,但它将被设置为项目的辅助工件,并且不会覆盖您创建的那个。下面是一个适用于 Maven 2 和 Maven 3 的示例:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.1-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>default-jar</id>
<phase>none</phase>
<configuration>
<finalName>unwanted</finalName>
<classifier>unwanted</classifier>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
一旦您禁用了maven-jar-plugin
,maven-install-plugin
也可能会给您带来麻烦。在 Maven 3 中,它可以像 maven-jar-plugin
一样被禁用:将 default-install
绑定到不存在的阶段。但是,在 Maven 2 中,maven-install-plugin
要求存在 target/classes
目录,并且它会在不存在主要工件时安装虚拟 jar。
【讨论】:
谢谢,太好了。我对 maven-war-plugin 做了同样的default-jar
执行 ID。我花了一些时间才注意到 Maven 在每次执行期间都会打印该 ID:[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ myproj ---
在本例中为default-install
,但对于其他所有插件来说都是相似的。不过感谢您的示例。
更明确地说,可以通过以下方式避免 maven-install-plugin 问题:<plugin> <artifactId>maven-install-plugin</artifactId> <executions> <execution> <id>default-install</id> <phase>never</phase> </execution> </executions> </plugin>
上述方法产生 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.4:install (default-install) on project **** :包装对于这个项目没有为构建工件分配文件-> [帮助 1] [
真的不能用命令行开关禁用吗?【参考方案2】:
这应该可以解决问题 - 请注意 <id>default-jar</id>
和 <phase/>
的使用。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>default-jar</id>
<phase/>
</execution>
</executions>
</plugin>
</plugins>
</build>
【讨论】:
对于 maven-install-plugin 也是如此,以防止 it 抱怨没有生成工件。 这会产生无效的 xml。我的 Intelij 抱怨 xml 有效性 使用阶段none
来避免XML验证错误。
这行得通,看起来这个插件默认被 mvn 包使用,即使它没有明确地在 pom.xml 文件中......我假设如果你将它包含在 pom.xml 中它会覆盖默认?
我用<phase>none</phase>
代替了<phase>none</phase>
,看起来更干净一些。【参考方案3】:
就我而言,我只想禁用 jar 插件,因为 jar 是空的。您可以在插件配置中使用skipIfEmpty
选项
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<skipIfEmpty>true</skipIfEmpty>
</configuration>
</plugin>
【讨论】:
仅供参考,此解决方案有效,但不适用于安装阶段。【参考方案4】:如果你这样声明会发生什么?
<packaging>pom</packaging>
即使它符合您的要求,也要小心。我不确定是否会产生负面影响——例如其他依赖于您的 jar 的 maven 项目无法找到它。
【讨论】:
这需要您重新绑定所有目标,因为它会关闭编译、测试等。【参考方案5】:使用 maven 3.3.9,以下对我有用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>default-jar</id>
<phase>none</phase>
<configuration>
<finalName>unwanted</finalName>
<classifier>unwanted</classifier>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>3.0.0-M1</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
所以在 maven-jar-plugin 的情况下,我将它绑定到一个不存在的阶段。对于 maven-install-plugin,我使用了“skip”配置参数。关于它的documentation 说:“将此设置为 true 以绕过工件安装。将其用于不需要在本地存储库中安装的工件。”
【讨论】:
【参考方案6】:将 jar 插件显式绑定到不存在的阶段。
【讨论】:
你确定吗?我刚试过,我仍然看到[INFO] [jar:jar execution: default-jar]
。
我已经以这种方式让源插件消失了,但我从来没有摆脱过 jar 插件,所以我不确定。【参考方案7】:
正如其他人所说,除了使用 <packaging>pom</packaging>
之外,无法将其关闭,这会关闭所有内容,并且可能不是您想要的。
即使它会生成两次,一个可行的解决方案是将你的 jar 进程绑定到package
阶段,因为它保证在默认值之后运行。通过覆盖相同的 JAR 文件,您会发现您的 JAR 文件被用于原始文件所在的任何位置。
【讨论】:
【参考方案8】:我正在使用不同的插件来压缩我的文件。避免执行 maven-jar 插件的最佳方法是什么?
首先,jar:jar
目标是 bound by default 在 package
阶段,用于包装类型为 jar
的项目。其次,没有办法解除绑定到阶段的插件。所以,如果你使用另一个插件(?),要么接受生成 2 个 JAR,要么更改包装(但我认为这不会很好)。
【讨论】:
“无法解除绑定到阶段的插件” - 这不是<phase />
在上面的答案中所做的吗?【参考方案9】:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
【讨论】:
不起作用(至少对我来说在 IDE 中使用 Maven 3.0.4 上面提到的配置是错误的 - 我在配置上没有看到任何以上是关于避免 maven-jar 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章