警告:我刚刚接过Maven,所以提到的事情可能是错误的或不是最佳做法。
我有一个中等规模的开源项目,我将从基本迁移到Maven NetBeans项目管理。这不是开发人员团队共享同一个房间,这是互联网上的1-5人共享SVN回购。阅读依赖关系的方法,似乎获得依赖关系的唯一方法是从在线仓库中获取它们或在本地安装它们。
这不是我想要的。我想保留SVN中的所有依赖项有很多原因,包括可移植性(任何人都可以通过,检查repo,构建和使用;所有这些都只是没有手动添加到本地repo和whatnot),获得更新的版本(下面讨论)和手动版本控制。
我对maven存储库的另一个问题是它们在版本方面落后了。例如,Logback是0.9.18 in mvnbrowser,但是0.9.24 officially。 PircBot是1.4.6 in mvnbrowser但1.5.0 officially。为何如此老版本?
问题3是我在repos中甚至不存在依赖关系,例如Easier Java Persistence。
所以
/lib
,例如仅供参考,这是一个包含3个模块的Java项目,项目全局依赖项和模块特定的依赖项。
如果它可以与NetBeans附带的捆绑版Maven一起使用,则可以获得奖励。
不重复
答案 0 :(得分:3)
这不是我想要的。我想保留SVN中的所有依赖项有很多原因(...)
我将回过头来讨论这个问题,但我在Maven: add a dependency to a jar by relative path中描述的解决方案(使用基于文件的存储库)可以实现这样的解决方案。
我对maven存储库的另一个问题是它们在版本方面落后了。例如,mvnbrowser中的Logback为0.9.18,而正式为0.9.24。 PircBot在mvnbrowser中为1.4.6,但正式为1.5.0。为何如此老版本?
看起来mvnbrowser索引完全过时(使其无用作为存储库搜索引擎),因为maven central repository确实有{ {3}}(logback项目正在做必须做的事情来实现这一点)但只有一个旧的logback-core-0.9.24.jar
。为什么?问问pircbot团队。无论如何,你是对的,中央存储库可能并不总是有最终版本。
问题3是我在repos中甚至不存在依赖关系,比如Easier Java Persistence。
是的,这也发生了。
如何强制所有依赖项来自/ lib,例如
如前所述,您应该仔细阅读pircbot-1.4.2.jar
中建议的解决方案。该解决方案不关于将库安装到本地存储库,但是关于使用基于文件的存储库(因此可以存储在SVN中) 。您可能错过了这一点,这与您的用例相符。并检查Maven: add a dependency to a jar by relative path是否有变化。
在相关的说明中,mvn可以直接从库的SVN repo构建吗?只是好奇
没得到那个。你能说清楚吗?
如果他们也使用Maven,是否有自动方式直接从依赖站点/ svn repo获取最新版本? IE库,如commons-lang或logback
Maven支持Brett's answer,您可以使用允许使用“任何大于X的版本”的语法。但为了构建可重复性,我 NOT 建议使用版本范围。您不希望构建突然失败,因为您背上发生了一些自动更新。只有在需要修复错误或新功能时才进行升级,但要明确地进行升级(如果没有损坏,请不要修复)。
您可能还会找到LATEST
和RELEASE
版本标记的version ranges。我不推荐它们,原因与上述相同,甚至更少,因为mentions。
有没有更好的方法来管理依赖项? (IE Ivy或者我错过了一些奇怪的POM选项)
不能说是常春藤。但是在Maven的土地上,如果你不能为你的项目(Nexus,Archiva,Artifactory)建立一个“公司”存储库,那么基于文件的存储库是IMO最好的方法。
答案 1 :(得分:0)
设置您自己的Maven存储库。