gpt4 book ai didi

java - Maven 复制依赖项 + 阴影 - 类路径管理

转载 作者:行者123 更新时间:2023-12-02 00:59:58 25 4
gpt4 key购买 nike

要将 Maven 项目及其依赖项打包,在许多解决方案中,可以使用 maven-dependency-plugin 及其目标 copy-dependency 来获取依赖项文件夹之外,或者可以使用 maven-shade-plugin 将所有代码放在一个 jar 中。

我实际上两者都做了:我选择将外部依赖项(例如 apache commons)作为外部库,并将我自己的依赖项(我有一个多模块 Maven 父项目)隐藏到一个独特的 jar 中。

它可以工作,除了类路径。我使用选项 excludeGroupIds 复制依赖项来排除我自己的 Maven 组 ID。我使用仅包含我自己的 Maven 组 ID 的选项shade。在此之前,我使用 jar 选项将类路径添加到 list 中。一切就绪,就可以工作了。但我的类路径还包含我自己的依赖项,这些依赖项实际上在最终 jar 中被隐藏。

这没什么大不了的,因为即使使用这个错误的类路径,结果也能工作。但我想知道是否有一种简单的方法来获得正确的类路径,以免将我的内部结构暴露给用户。

这是一个演示该问题的基本示例:

<groupId>com.foo.bar</groupId>
<artifactId>com.foo.bar.launcher</artifactId>
<dependencies>
<dependency>
<groupId>com.foo.bar</groupId>
<artifactId>com.foo.bar.utils</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<excludeGroupIds>com.foo.bar</excludeGroupIds>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<include>com.foo.bar:*</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>

生成的 list 包含以下内容:类路径:lib/com.foo.bar.utils-0.0.1.jar lib/commons-lang3-3.8.1.jar 而 com.foo.bar.utils 不存在.

最佳答案

如果您查看以下 mvnrepository 链接,maven shade 插件依赖于 maven 依赖树。根据上面的 pom.xml maven 依赖插件,您已经排除了 com.foo.bar 依赖项。您可以省略 maven-dependency-plugin 来创建 fat jar。如果有阴影插件,则不强制使用。

您可以使用以下命令检查并复制项目中使用的所有依赖项。

mvn dependency:copy-dependencies

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-shade-plugin/3.2.1

关于java - Maven 复制依赖项 + 阴影 - 类路径管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778916/

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