maven-shade-plugin插件的输出,由于shadedArtifactAttached为false而被install命令覆盖。

huangapple 未分类评论57阅读模式
英文:

maven-shade-plugin output with shadedArtifactAttached false overwritten by install

问题

我遇到了使用maven-shade-plugin创建的jar文件部署的问题。它曾经可以正常工作,但现在停止工作了。根据我的研究,问题似乎是安装步骤正在覆盖shaded jar。

如果我使用以下设置:

<shadedArtifactAttached>true</shadedArtifactAttached>

它会为我创建一个fat jar,但如果我将其更改为:

<shadedArtifactAttached>false</shadedArtifactAttached>

安装/部署将删除依赖项和主类的清单条目。

我不想使用"true"设置,因为文件重命名将破坏所有依赖于通过cURL部署的通用脚本的工具。

所以,当我运行以下命令时:

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean package shade:shade

我得到了正确的文件:ontology-merger-0.3.31.jar(大文件)和original-ontology-merger-0.3.31(小文件)。

当我运行以下命令时:

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean package shade:shade install

安装步骤将破坏shaded jar。我认为这是因为它在其上运行了maven-jar-plugin,尽管我在pom.xml中没有提到maven-jar-plugin。我不知道如何关闭它。

日志中的重要部分:

[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31.jar with C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31-shaded.jar
[INFO] Dependency-reduced POM written at: C:\dev\allotrope\source\ontology-qa-tools\merger\dependency-reduced-pom.xml
...
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ ontology-merger --- [INFO] Building jar: C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31.jar
...
[INFO] --- maven-install-plugin:2.4:install (default-install) @ ontology-merger --- [INFO] Installing C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31.jar to C:\Users\User\.m2\repository\com\osthus\ontology-merger\0.3.31\ontology-merger-0.3.31.jar
...

我的pom.xml中的部分如下:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
        <shadedArtifactAttached>true</shadedArtifactAttached>
        <!-- 其他配置 -->
    </configuration>
</plugin>

我尝试修复的各种尝试位于这个分支:

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/tree/deployment-test

pom.xml文件的路径:

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/blob/deployment-test/merger/pom.xml

一些历史记录:

我的部署曾经在多年内毫无问题地运行,但最近已经中断,我上个月通过以下方式修复:

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/commit/7080d16179c2ccf7ab47208716b1bf1b3a05be29

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/commit/0d231d691ffd48347e34f9da9373d092939e69e2

pom.xml文件中添加了一些样板,并将

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean deploy

更改为

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean package shade:shade deploy

感谢您的时间。

英文:

I am having a problem with deploying jar files created by the maven-shade-plugin. It used to work, but it has stopped working. From my research the problem seems to be that the install step is overwriting the shaded jar.

If I use the following setting:

&lt;shadedArtifactAttached&gt;true&lt;/shadedArtifactAttached&gt;

It will create a fat jar for me, but If I change that to

&lt;shadedArtifactAttached&gt;false&lt;/shadedArtifactAttached&gt;

installing/deploying will remove the dependencies and the manifest entry for the main class.

I don't want to use the "true" setting, because the file rename will break all my tooling that depends on a generic script that will a deployed artifact via cURL.

So, when I run

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean package shade:shade

I get the correct files: ontology-merger-0.3.31.jar (big file) and original-ontology-merger-0.3.31 (small file)

when I run

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean package shade:shade install

the install step will trash the shaded jar. I am assuming that this happens because it's running the maven-jar-plugin over it, although I don't mention the maven-jar-plugin anywhere in my pom.xml. I have no idea how to switch this off.

Important bits from the log:

[INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31.jar with C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31-shaded.jar
[INFO] Dependency-reduced POM written at: C:\dev\allotrope\source\ontology-qa-tools\merger\dependency-reduced-pom.xml
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ ontology-merger --- [INFO] Using &#39;UTF-8&#39; encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.5.1:compile (default-compile) @ ontology-merger --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ ontology-merger --- [INFO] Using &#39;UTF-8&#39; encoding to copy filtered resources.
[INFO] Copying 30 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.5.1:testCompile (default-testCompile) @ ontology-merger --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ ontology-merger --- [INFO] Skipping execution of surefire because it has already been run for this configuration [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ ontology-merger --- [INFO] Building jar: C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ ontology-merger --- [INFO] Installing C:\dev\allotrope\source\ontology-qa-tools\merger\target\ontology-merger-0.3.31.jar to C:\Users\User\.m2\repository\com\osthus\ontology-merger\0.3.31\ontology-merger-0.3.31.jar
[INFO] Installing C:\dev\allotrope\source\ontology-qa-tools\merger\dependency-reduced-pom.xml to C:\Users\User\.m2\repository\com\osthus\ontology-merger\0.3.31\ontology-merger-0.3.31.pom

The section in my pom.xml currently looks like this:

			&lt;plugin&gt;
				&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
				&lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt;
				&lt;version&gt;3.2.3&lt;/version&gt;
				&lt;configuration&gt;
					&lt;shadedArtifactAttached&gt;true&lt;/shadedArtifactAttached&gt;
					&lt;transformers&gt;
						&lt;transformer
							implementation=&quot;org.apache.maven.plugins.shade.resource.ManifestResourceTransformer&quot;&gt;
							&lt;mainClass&gt;com.osthus.ontology_merger.MergerMain&lt;/mainClass&gt;
							&lt;manifestEntries&gt;
								&lt;Main-Class&gt;com.osthus.ontology_merger.MergerMain&lt;/Main-Class&gt;
							&lt;/manifestEntries&gt;
						&lt;/transformer&gt;
						&lt;transformer
							implementation=&quot;org.apache.maven.plugins.shade.resource.ServicesResourceTransformer&quot; /&gt;
						&lt;transformer
							implementation=&quot;org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer&quot; /&gt;
						&lt;transformer
							implementation=&quot;org.apache.maven.plugins.shade.resource.ApacheNoticeResourceTransformer&quot;&gt;
							&lt;addHeader&gt;false&lt;/addHeader&gt;
						&lt;/transformer&gt;
					&lt;/transformers&gt;
					&lt;filters&gt;
						&lt;filter&gt;
							&lt;artifact&gt;*:*&lt;/artifact&gt;
							&lt;excludes&gt;
								&lt;!-- Some jars are signed but shading breaks that. Don&#39;t include 
									signing files. --&gt;
								&lt;exclude&gt;META-INF/*.SF&lt;/exclude&gt;
								&lt;exclude&gt;META-INF/*.DSA&lt;/exclude&gt;
								&lt;exclude&gt;META-INF/*.RSA&lt;/exclude&gt;
							&lt;/excludes&gt;
						&lt;/filter&gt;
					&lt;/filters&gt;
				&lt;/configuration&gt;

My various fix attempts are in this branch:

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/tree/deployment-test

Path to the pom.xml:

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/blob/deployment-test/merger/pom.xml

A bit of history:

My deployment that had been working for years without a hitch already broke recently and I fixed it last month via

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/commit/7080d16179c2ccf7ab47208716b1bf1b3a05be29

and

https://gitlab.com/allotrope-open-source/ontology-qa-tools/-/commit/0d231d691ffd48347e34f9da9373d092939e69e2

where I had to add some boilerplate to the pom.xml files and change

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean deploy

to

$ mvn -s ../.m2/settings.xml --batch-mode --errors --fail-at-end --show-version clean package shade:shade deploy

Thanks for your time

答案1

得分: 0

我已经找到了一个解决方案。将以下内容添加到 pom-xml 文件中:

<plugin>
	<groupId>maven</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<executions>
		<execution>
			<phase>package</phase>
		</execution>
	</executions>
</plugin>

这将把 maven-jar-plugin 的执行从 install 阶段移动到 package 阶段,因此它将不再覆盖 maven-shade-plugin 的输出。然后可以通过以下方式进行部署:

mvn clean package shade:shade deploy
英文:

I have found a solution. Add this to the pom-xml:

&lt;plugin&gt;
	&lt;groupId&gt;maven&lt;/groupId&gt;
	&lt;artifactId&gt;maven-jar-plugin&lt;/artifactId&gt;
	&lt;executions&gt;
		&lt;execution&gt;
			&lt;phase&gt;package&lt;/phase&gt;
		&lt;/execution&gt;
	&lt;/executions&gt;
&lt;/plugin&gt;

This will shift the execution of the maven-jar-plugin from the install phase to the package phase, so it will no longer destroy the output of the maven-shade-plugin. Deployment can then be done by calling:

mvn clean package shade:shade deploy

huangapple
  • 本文由 发表于 2020年6月29日 12:46:07
  • 转载请务必保留本文链接:https://java.coder-hub.com/62631364.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定