【发布时间】:2011-03-14 16:00:53
【问题描述】:
所以,我有一个包含多个依赖 jar 的战争项目,这些 jar 在任何存储库中都不可用。直到最近,我一直将它们保存在 src/main/webapp/WEB-INF/lib 中,并使用 system scope 将它们添加到 pom 中。
我知道这是有问题的,所以我正在寻找清理我的构建。我已经通过install:install-file 插件将罐子半手动安装到我的.m2/repository 中。这对我来说很好,但我团队中的其他人呢?我们很小,设置 Nexus 对我们来说并不是一个真正的选择。我已经求助于将 cmets 添加到 pom.xml 解释如何为每个 jar 运行 install:install-file。
install:install-file 解决方案我没问题,但我仍然想将这些工件包含在我的项目的版本控制中,而不仅仅是让它们散布在我的文件系统中。
将它们保存在src/main/webapp/WEB-INF/lib 中不起作用,因为这会自动将它们添加到生成的战争工件中(题外话:如果 maven 只是继续并将它们添加到这里的类路径中,我就完成了,无需安装:安装文件!)
问题:在 maven 目录布局中是否有一个允许的位置,我可以将这些 .jar 文件放入其中,以便我可以将它们作为我项目的一部分?
我确实意识到这里发生了什么 - Maven 试图将依赖 jars 放在我的构建之外,以便当其他项目依赖于我的构建时,它们可以解决传递依赖关系。这对于进入公共 maven 存储库的开源项目来说非常棒,但我敢打赌,绝大多数使用 Maven 的人都在从事诸如此类的“叶”项目,并且有一种方法真的很方便将 jar 文件作为项目的一部分包含在内,而无需跳过这么多环节。
【问题讨论】:
-
设置 Nexus 非常简单。我在家里有一个只为我自己运行的实例。
-
使用 nexus 创建本地存储库会不会太过分了?您可以使用它来代理所有 maven 存储库并保留那些 3rd 方 jar。
-
当然,我可以安装 Nexus。但后来我不得不要求所有接触这个项目的人也这样做。或者在服务器上设置、备份、担心安全等。处理几个自定义 jar 文件似乎是一个非常麻烦的解决方案。
-
如果您按照预期使用 Maven 的方式使用 Maven,这不是“越过障碍”。
maven-release-plugin以及正确的maven-scm-plugin和<distributionManagement/>指令在您的pom.xml中使这一切变得透明。 -
看我的回答,你不用要求每个接触项目的人做任何事情,都在用于构建项目的
pom.xml。如果编辑他们的settings.xml要求太多,那么只需将存储库信息嵌入pom.xml,这是不好的做法,但进入门槛很低。