防止 maven-shade-plugin 暴露 依赖项?

2024-01-11

感谢单独的thread https://stackoverflow.com/questions/48715546/maven-how-to-specify-javac-plugin-argument-with-maven-compiler-plugin,我意识到我的项目的 uber-jar 有一个错误。我使用创建 uber-jarmaven-shade-plugin因为我需要更高级的转换器功能来合并多个 ServiceLoader 定义。

所以,问题是我的项目有系统范围的编译时依赖tools.jar, 定位tools.jar在本地机器上相对于java.home系统属性。错误是我没有意识到这种依赖性是:

  1. 泄漏到依赖减少pom.xml超级罐子的,和
  2. 更糟糕的是,模式${java.home}依赖关系定义中的内容被解析并硬编码到 uber-jar 的 POM 中。第二部分特别令人尴尬,因为它揭示了构建机器的 JDK 位置(参见第 50 行)here https://oss.sonatype.org/content/repositories/releases/systems/manifold/manifold-all/0.9-alpha/manifold-all-0.9-alpha.pom).

为了解决此问题,我有条件地禁用了创建依赖项的配置文件。以下所有详细信息均在<activation>部分:

Before:

<profile>
  <id>internal.tools-jar</id>
  <activation>
    <file>
      <exists>${java.home}/../lib/tools.jar</exists>
    </file>
  </activation>
  <dependencies>
    <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.8.0</version>
      <scope>system</scope>
      <systemPath>${java.home}/../lib/tools.jar</systemPath>
    </dependency>
  </dependencies>
</profile>

After:

<profile>
  <id>internal.tools-jar</id>
  <activation>
    <jdk>1.8</jdk>
    <file>
      <missing>src/main/java/systems/manifold/Dummy.java</missing> <!-- this file is only present in the uber-jar module, therefore exclude if present -->
    </file>
  </activation>
  <dependencies>
    <dependency>
      <groupId>com.sun</groupId>
      <artifactId>tools</artifactId>
      <version>1.8.0</version>
      <scope>system</scope>
      <systemPath>${java.home}/../lib/tools.jar</systemPath>
    </dependency>
  </dependencies>
</profile>

所以,毕竟,我的问题是:这是防止这种系统范围的依赖关系泄漏到 uber-jar 的依赖关系减少的最好方法吗?pom.xml?

提前致谢,

Kyle

2018年2月16日更新:

不幸的是,shade 插件中的以下配置并不能防止系统范围依赖项泄漏:

<artifactSet>
  <excludes>
    <exclude>*</exclude>
  </excludes>
</artifactSet>

到阴影插件的配置,但解析的系统范围依赖关系仍然显示在 POM 中。令人费解!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 maven-shade-plugin 暴露 依赖项? 的相关文章

  • Maven无法编译java 1.8

    我正在尝试使用 maven 构建 jar 但我不断收到错误 ERROR Failed to execute goal org apache maven plugins maven compiler plugin 3 1 compile de
  • Maven 管理的 Java EE 应用程序中 JBoss 提供的库

    这对我来说实际上不太可能 但网上似乎没有关于将 JBoss 提供的依赖项导入 Maven 管理的 Java EE 应用程序以在其中部署的直接答案 据我所知 有两件事与这个问题有关 那就是jboss as client外部 就 JVM 而言
  • Maven 在 POM 中使用加密密码

    如何在 maven 3 中使用 pom xml 中的加密密码 我有一些使用对我们来说非常敏感的密码的pom 例如我们有POM要部署在Weblogic等应用程序服务器中或在数据库中运行脚本 并且我们不喜欢只按原样输入密码 我已经拥有部署工件的
  • 将 spring boot 应用导入到另一个项目中

    因此 我尝试在另一个项目 测试框架 中添加一个 spring boot 可执行 jar 作为依赖项 但是一旦添加到 pom 并导入 Java 导入无法正常工作 如果我查看 jar 内部 所有包都带有以下前缀 BOOT INF classes
  • Maven `help: effective-pom` 只为单个项目生成,而不是所有项目

    我想为多模块构建中的所有子项目生成有效的 pom The help effective pom文档here http maven apache org plugins maven help plugin usage html The hel
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • 我如何告诉 Maven 从自定义 Nexus 存储库获取最新版本的工件

    我有以下要求 我需要从自定义 Nexus 存储库而不是快照存储库下载最新版本的工件 请建议 Thanks 要获取任何工件的最新版本 只需省略
  • 在单独的模块中使用 Spring AOP 方面

    我在一个 Maven 项目模块中有一个方面 com x NiceAspect 在一个单独的 Maven 模块中有一个类 com x NiceClass 这些模块具有相同的 POM 父级 共同创建一个项目 我想要实现的目标是拥有一个通用的方面
  • AAR 可以包含传递依赖吗? [复制]

    这个问题在这里已经有答案了 现在我有一个库项目 比如项目 Foo 它依赖于像 OkHttp 这样的库 现在 Foo 有一个 Maven 构建步骤 可以生成 AAR 并将其推送到公共位置 现在假设我有项目 B 我们将其称为 Bar Bar是一
  • Intellij IDEA 断点停止在 JAR 中,而不是我的项目的源代码中

    我在 java 文件中设置了一个断点 我通过 maven jetty 插件启动了 jetty 我设置断点的java文件也打包成JAR了 Intellij 在断点处停止 但它显示了打包到 JAR 中的文件而不是 java 文件 它的行为就像我
  • 45000 ms 内无法绑定锁定端口 70 54

    当我尝试使用 MVN 测试命令行运行我的 selenium 测试时 出现此错误 奇怪的是 我三天前尝试了一下 运行成功了 T E S T S Running GoogleNavigationTest Tests run 1 Failures
  • 使用 javac 和 javax.tools.JavaCompiler 有什么区别?

    Maven 编译器插件文档states http maven apache org plugins maven compiler plugin 编译器插件用于编译项目的源代码 从 3 0 开始 默认编译器是 javax tools Java
  • 使用“mvncompilejib:build”推送到 Docker 注册表失败

    我正在尝试使用以下命令构建并将我的 docker 映像部署到私有注册表谷歌联合投资银行Maven 插件 但是 它因访问私有注册表时出现问题而失败 我已经安装了Docker 桌面 v19 03 1 on my Windows 10机器 接下来
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications
  • 对 http://repo1.maven.org/maven2/ 的请求返回 501 HTTPS 必需状态和正文 [重复]

    这个问题在这里已经有答案了 截至 2020 年 1 月 15 日 我向中央存储库提出请求后收到以下回复 Requests to http repo1 maven org maven2 return a 501 HTTPS Required
  • Maven 版本插件跳过更新检查

    当我尝试使用versions use releases我的发布存储库被标记为 已禁用 这意味着快照依赖项不会解析为发布 我不明白为什么存储库被认为是禁用的 以下是构建的简短调试输出 DEBUG f remoteArtifactReposit
  • Maven 不会运行测试

    跑步时mvn testmaven 不会运行所有测试类 当我通过添加显式提供一个类时 Dtest PropertyTests将运行测试 这是我的 pom xml
  • 更改 Jenkins 云构建的 gradle 本地存储库缓存位置

    我需要更改存储库下载的保存位置 我无法使用用户主目录 因为我的构建是在云服务上运行的 该服务不保留此内容 这导致我的依赖项被一遍又一遍地下载 并消耗了大量的云存储时间 我正在使用 gradle 1 0 里程碑 5 我的构建文件具有以下存储库
  • 如何在Windows上安装机器人操作系统ROSJava?

    ROS 的文档很糟糕 一个很大的讽刺是 ROS 的 Groovy 和 ROSJava 版本的创建是为了让 Windows 等平台上的开发人员能够利用出色的机器人 SDK 而所有安装说明仍然面向 Linux ubuntu 用户 The ROS
  • 使用 Netbeans(和 Maven)运行正确的上下文根

    当我从 Netbeans 7 2 运行项目时遇到了一些问题 我还使用 Glassfish 3 1 2 服务器 事实上 我正在将现有项目从 Ant 迁移到 Maven 我的 pom xml 已完成 并且我已经使用了上下文根的自定义 如下所述

随机推荐