这里对 Maven 很陌生,所以让我先解释一下我要做什么:
我们有一些 JAR 文件不会被添加到 repo 中。这是因为它们特定于 Oracle ADF,并且已经放置在我们的应用程序服务器上。任何时候都只有一个版本可用于所有应用程序。但是为了编译,我们需要在类路径上有这些。有很多这样的 JARS,所以如果我们要升级到更新版本的 ADF,我们将不得不进入每个应用程序并重新定义一些非常冗余的依赖项。同样,我的目标是将这些 JAR 添加到类路径中,因为我们将控制其他地方实际使用的版本。
所以基本上,我想在编译时将给定网络目录(开发人员无权修改)中的每个 JAR 添加到 Maven 的类路径中。而且无需将这些 JAR 文件中的任何一个放入存储库中。当然,这些 JAR 不会打包到任何 EAR/WAR 中。
编辑:
我不想将这些添加到公司 repo 的其他原因是:
- 这些 JAR 不被其他任何东西使用。它们有很多,不常见且为 Oracle 所独有。
- 在任何时候都只会使用一个给定 JAR 的一个版本。永远不会出现应用程序A依赖1.0而应用程序B依赖1.1的情况。应用程序 A 和 B 都将完全依赖于 1.1 或 1.2。
- 我们计划维护 100 多个应用程序。这是很多 pom.xml 文件,这意味着任何时候我们升级 Oracle ADF,如果没有正确指定任何依赖项(通过人为错误),我们每次编辑这 100 多个 pom.xml 文件时都必须修复每个错误升级。
最佳答案
我看到三个选项:
- 将依赖项放入存储库(可以是 this answer 中描述的文件存储库)并使用范围
provided
声明它们. - 使用脏
system
范围技巧(即声明具有系统范围的依赖项并设置文件系统中 jars 的路径。 - #2 的小变化:创建一个带有 MANIFEST.MF 引用所有 jar(使用相对路径)的 jar,并使用
system
声明对这个几乎空的 jar 的依赖。范围。
干净的方法是选项 #1,但其他方法也适用于您的情况。选项 #3 似乎最接近您要查找的内容。
更新:澄清选项#3
假设您有一个包含 a.jar
的目录 和 b.jar
强>。创建一个 c.jar
带有 Class-Path
进入其META-INF/MANIFEST.MF
列出其他 jar ,像这样:
Class-Path: ./a.jar ./b.jar
然后在您的 POM 中声明对 c
的依赖(并且仅在 c
上)带有 system
范围,其他 jar 将变得“可见”,而无需在您的 POM 中明确列出它们(当然,您需要在 list 中声明它们,但这可以很容易地编写脚本)。
关于java - 为 maven 指定类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677574/