gpt4 book ai didi

maven - 在多模块项目中使用 Maven 阴影插件 - NullPointerException

转载 作者:行者123 更新时间:2023-12-03 23:33:10 25 4
gpt4 key购买 nike

我有一个场景,我需要创建一个包含所有模块及其依赖项的多模块 maven 项目的 uber jar。我尝试使用 Maven 阴影插件。但它似乎只有在我在模块级别使用它时才有效。如果我在父 pom 中添加插件条目,那么构建会中断(它会尝试遮蔽父 pom)

 [INFO] Replacing original artifact with shaded artifact.
[INFO] Replacing null with C:\Projects\foo.bar\target\foobar-0.0.1-SNAPSHOT-shaded.pom
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error creating shaded jar: null: NullPointerException -> [Help 1]

<packaging> 开始,这似乎是有道理的。对于父 maven 项目是 pom。
但是应该有一些方法可以为多模块项目创建一个 uber jar ......有什么想法吗?

最佳答案

是的 !你可以 ! :-)

Shade 有一个实现问题:它不知道何时在 pom(不是 jar 或 web)项目上运行。 Pom 项目不生成二进制 Artifact ,然后 shade 找不到要合并、移动等的文件,抛出 NPE。

要解决此问题,请从您的 aggegate-Pom 项目中创建一个父 POM。在其中,将阴影定义和配置配置到某个配置文件(例如,alwaysActiveProfiles)并使用命令安装/部署它:

mvn deploy -P -alwaysActiveProfiles



此命令将在不运行 shade 插件 pom(-alwaysActiveProfiles 选项抑制 shade 插件执行)的情况下安装此着色父级,之后,您的 maven 依赖项目将工作。
您的阴影父 pom 可能如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion>
<groupId>xxxxxxxx</groupId>
<artifactId>web-pom</artifactId>
<name>web-pom</name>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
...
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
...
</dependencies>

<profiles>
<profile>
<id>alwaysActiveProfiles</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
</profiles>

请记住,您的 setting.xml 必须默认启用 alwaysActiveProfiles,否则 shade 将不会在您的依赖 shade-pom 项目中运行。

关于maven - 在多模块项目中使用 Maven 阴影插件 - NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3147512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com