如何从编译的 jar 中删除运行时依赖项

时间:2021-02-17 18:32:18

标签: java maven dependencies

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

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

1 个答案:

答案 0 :(得分:1)

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>compile</scope>
        </dependency>

通过声明 <scope>compile</scope> 依赖项不会被打包到最终的 jar 中。它将仅用于编译。

可以在此处找到更多信息maven scope documentation

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

所以你要么在 pom 中将它们声明为独立的依赖项,要么在运行时提供它们。