【问题标题】:How can I remove runtime dependencies from compiled jar如何从已编译的 jar 中删除运行时依赖项
【发布时间】:2021-02-17 18:32:18
【问题描述】:

我的 Maven 项目在构建时会生成一个 jar,供我组织中的许多应用程序使用。但是,在一个方面,大 jar 文件大小会导致连接超时而导致部署问题,而小 jar 文件不会导致此问题。对于这个环境,我想去除导致我的 jar 大小膨胀的几个大型运行时依赖项,并在部署点单独加载它们。显然我在编译期间需要这些依赖项,否则它会失败。

所以我的问题是:有没有办法从已编译的 jar 中提取运行时依赖项?

【问题讨论】:

  • 与我每次向 SE 发布问题一样,我想我在再搜索几分钟后找到了答案。我可能可以在 Maven 中使用 scope 标记在运行时排除依赖项。但是,我可以将此范围标记用于传递依赖项吗?

标签: java maven dependencies


【解决方案1】:
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>compile</scope>
        </dependency>

通过声明&lt;scope&gt;compile&lt;/scope&gt;,该依赖项将不会被打包到最终的jar 中。它将仅用于编译。

更多信息可以在这里找到maven scope documentation

至于您关于传递依赖的问题,不,它不起作用。当它们由父依赖项导入时,使用范围也会从 jar 中排除。

因此,您要么在 pom 中将它们声明为独立依赖项,要么在运行时提供它们。

【讨论】:

  • 感谢您的回答!与我的评论保持一致,我认为我找到了传递问题的解决方法。我排除了 pom 依赖项中最糟糕的传递依赖项,然后我在 pom 级别声明这些传递依赖项,并使用 provided 标记声明它们将在运行时由系统可用。另外,我认为您的意思是使用provided 而不是compilecompile 是不声明作用域的默认行为
猜你喜欢
  • 1970-01-01
  • 2020-04-19
  • 2015-03-07
  • 2023-03-25
  • 2013-07-26
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
相关资源
最近更新 更多