我有一些我需要包含在项目中的proprietary.jar,但我不希望将它安装到本地存储库。
我最初做的是将jar放入项目的lib/
文件夹中的版本控制中,然后将Maven依赖项指定为:
<!-- LOCAL DEPENDENCY -->
<dependency>
<groupId>topsecret</groupId>
<artifactId>proprietary</artifactId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${basedir}/lib/java/proprietary.jar</systemPath>
</dependency>
然而,当我的项目成为别人的依赖时,这就成了一个大问题。 Maven将无法验证此POM,因为路径不是绝对的。
解决这个问题的最佳方法是什么?
答案 0 :(得分:4)
我认为需要回答的第一个问题是,您为什么不想将其安装在本地存储库中?
Maven遵循一个关于配置哲学的约定,所以你对“The Maven Way”的争斗越多,对你来说就越难。除非你有令人信服的理由不将jar安装到存储库,否则这对我来说似乎是最好的解决方案。
答案 1 :(得分:2)
我在previous answer中描述了如何设置基于文件的存储库,并在无法使用公司存储库时避免恶意system
范围。看看吧。
答案 2 :(得分:0)
对于第三方文物,创建一个专门用于第三方文物的独立存储库是最干净,最轻松的。这使您团队中的其他任何人都可以轻松构建项目。
例如,我正在使用Nexus(社区编辑)来管理maven文物。如果有人依赖于不在maven central中的第三方lib,我们会将其添加到第三方仓库。这允许其他人在不必手动查找和下载人工制品的情况下进行构建。
Nexus支持各种身份验证策略,包括LDAP,因此可以保护敏感文件免遭未经授权的使用。自从迁移到存储库管理器以来,管理人工制品,特别是第三方文物已经变得更加容易。
见
PS:Nexus的另一个好处是你可以创建一个“虚拟”存储库,它是由几个存储库“压平”成一个存储库的组合。这样就结束了将存储库添加到settings.xml或将存储库放入项目pom中。你可以拥有自己的存储库,第三方存储库和其他流行的存储库(中央,apache,codehaus,jboss等......)并将nexus设置为镜像。然后所有请求都通过Nexus,加快构建并简化存储库配置。