对于maven来说这是一个新手,所以让我先解释一下我要做的事情:
我们有一些不会添加到仓库的JAR文件。这是因为它们特定于Oracle ADF并且已经放置在我们的应用程序服务器上。任何时候只有1个版本可用于所有应用程序。但是为了编译,我们需要在类路径上有这些。有很多这些JARS,所以如果我们要升级到更新版本的ADF,我们必须进入每个应用程序并重新定义一些非常冗余的依赖项。所以,我的目标是将这些JAR添加到类路径中,因为我们将控制在其他地方实际使用的版本。
所以基本上,我想在给定的网络目录(其中devs没有权限修改)中添加每个JAR到maven的类路径,以便在编译时使用。并且不将任何这些JAR文件放入存储库中。当然,这些JAR不能打包到任何EAR / WAR中。
修改
为什么我不想将这些添加到公司回购中的原因之一是:
答案 0 :(得分:3)
我看到三个选项:
provided
声明它们。system
范围技巧(即使用系统范围声明依赖关系并设置文件系统中jar的路径。system
范围。清洁方式是选项#1,但其他方法也适用于您的情况。选项#3似乎最接近你想要的。
更新:澄清选项#3
假设您有一个 a.jar
和 b.jar
的目录。在其c.jar
列出其他广告的Class-Path
条目中创建 META-INF/MANIFEST.MF
,如下所示:
Class-Path: ./a.jar ./b.jar
然后在c
(并且只在c
)上使用system
范围在您的POM中声明依赖关系,其他jar将变为“可见”而无需在您的明确列出它们POM(当然,你需要在清单中声明它们,但这可以很容易编写脚本)。
答案 1 :(得分:1)
虽然您明确声明您不希望它们存储在存储库中,但您的理由并不合理。这是我的建议:
<scope>provided</scope>
将它们添加为maven依赖项。这意味着它们由您的运行时(应用程序服务器)提供,并且不会包含在您的工件中(war / ear)建议广泛使用maven的组织拥有自己的存储库。你可以看到Nexus。然后,您可以在存储库中安装这些jar,所有开发人员都将使用它们,而不是仅在每个本地存储库中安装jar。
(“ugliest”选项根本不是使用maven,把jar放在相对位置并将它们添加到项目的类路径中,提交classpath属性文件(取决于IDE))
答案 2 :(得分:1)
如果您正在开发ADF(我估计10g / 11g)组件,我想您将使用JDeveloper作为IDE。 JDeveloper附带了一个非常丰富的库管理工具,允许您定义编译所需的库或应该打包哪些库以进行部署。我想你已经知道如何向项目中添加库,并在部署配置文件中指出在打包时应该选择哪些库。如果你想让你的库远离maven,也许这可能是最好的方法。假设您所引用的库也是“Webcenter”库,使用这种方法可以保证您拥有足够的库,因为JDeveloper将附带正确的版本库。
然而,当您使用maven时,我不建议保留一些库失控和maven存储库。我建议在maven和Oracle JDeveloper库管理之间进行选择。在我们当前的项目中,我们正在使用JDeveloper ADF 11g(和WebCenter),我们使用maven,它只是简化了库管理。在一天结束时,我们将拥有大量第三方库(比如Apache,Spring等),这些库对于maven进行管理很有用,并且在IDE中编译实际上不需要太多的Oracle库(就像你一样)只需要API而不是他们的实现)。我们的方法是在需要时将Oracle库添加到我们的maven存储库,让maven控制整个依赖关系管理。
正如其他人在答案中所说,如果您不希望将依赖项包含在任何工件中,请使用<scope>provided</scope>
。一旦配置了开发环境,您就会感激maven完成工作,您可以(几乎)忘记依赖管理。要构建JDeveloper IDE文件,我们使用maven jdev插件,因此mvn jdev:jdev
将构建生成我们的项目文件并设置库的依赖关系,并在其中进行正确编译。
更新:
当然,您需要在pom文件中引用ADF库。在我们的项目中,我们只是参考每个应用程序使用的那些,比如说ADF标签库或特定服务,而不是整个ADF / WebCenter堆栈。为此目的,使用“提供”范围。您仍然可以让JDeveloper管理您的库,但我们发现使用100%JDeveloper库方法或100%maven方法更简单。如果你采用maven方法,首先需要花一些时间来构建你的本地仓库,但是一旦完成它就很容易维护,整个周期(开发,构建,测试,打包和部署)将更简单,具有更一致的配置。确实,在未来您将不得不更新到以后的ADF版本,但是由于您的存储库结构已经定义,因此它应该是快速的。对于将来的升级,我建议将ADF版本保留为顶部pom上的属性,这样可以更快地切换到新版本。