Maven pluginManagement会干扰shade插件
刚开始与马文为真;马上得到一个大惊喜 我理解(或者我认为我理解)胖罐/优步罐的概念。将代码与所有依赖项打包,等等。Maven pluginManagement会干扰shade插件,maven,maven-shade-plugin,uberjar,Maven,Maven Shade Plugin,Uberjar,刚开始与马文为真;马上得到一个大惊喜 我理解(或者我认为我理解)胖罐/优步罐的概念。将代码与所有依赖项打包,等等。maven shade plugin,找到文档,举个例子,检查它是否有效。现在将它添加到我的POC项目中,它来自maven原型快速启动-有什么可能出错,嗯 简而言之,quickstart按以下方式安排: <build> <pluginManagement><!-- lock down plugins versions to avoid using
maven shade plugin
,找到文档,举个例子,检查它是否有效。现在将它添加到我的POC项目中,它来自maven原型快速启动-有什么可能出错,嗯
简而言之,quickstart按以下方式安排:
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
...
...
因此,我刚刚添加了一个着色插件,准备结束这一天:
<!-- Maven Shade Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<!-- Run shade goal on package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
unshade
是坏分支,master是好分支)
谈论违反最小意外原则的行为,呃=)
有人能解释一下发生了什么事吗?生成的pom中的注释提到了一些关于父pom的内容,但我还没有对多pom设置进行任何操作。
中描述了角色:
插件管理包含插件元素的方式与[插件]基本相同,不同之处在于它不是为这个特定的项目构建配置插件信息,而是配置从这个项目构建继承的项目构建
在由原型生成的项目中,它的目标是设置默认插件的指定版本(maven clean plugin
,maven jar plugin
,…)。请注意,这些默认插件不会出现在POM
部分中,但它们是隐式声明的(您可以通过运行mvn help:effective POM
来检查)
但是向
部分添加插件不会使项目调用该插件。在这里,您可以设置配置和您想要使用的插件版本。要调用插件,您必须在
部分声明它
在一些项目中(大多数情况下是多模块项目),您可以看到在父POM的
中声明的插件及其配置,然后在需要调用该插件的模块的
部分中引用:因此,您不必在每个模块上重复相同的配置
如果您想使用POM继承,则主要使用
。否则,对于简单的项目,您可以在
部分中声明它们。我还看到一些项目在
中定义了所有配置,只是为了使
部分更短、更可读,如下面的示例所示。这只是品味的问题
<build>
<!-- pluginManagement section : set versions and configurations -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<!-- Run shade goal on package phase -->
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<!-- plugins section : plugins that are invoked when building the project -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
</plugin>
</plugins>
</build>
org.apache.maven.plugins
也许我不明白你所说的“请注意,这些默认插件不会出现在您的POM部分”-但我的pomm从generator中出来时,确实明确声明了所有这些插件:谢谢,伙计,我过了一会儿就收到了。有点像是声明要使用的插件,而第节是告诉它们运行的。让我困惑的是,pluginmanagement内部也存在漏洞;删除该选项会完全改变其中的含义=)