管理maven依赖项 – 新版本和非Repo库

警告 :我刚刚接过Maven,所以提到的事情可能是错误的或不是最佳做法。

我有一个中型开源项目,我从基本的NetBeans项目管理迁移到Maven。 这不是开发人员团队共享同一个房间,这是互联网上的1-5人共享一个SVN回购。 阅读依赖关系的方法,似乎获得依赖关系的唯一方法是从在线仓库中获取它们或在本地安装它们。

这不是我想要的。 我想保留SVN中的所有依赖项有很多原因,包括可移植性(任何人都可以通过,检查repo,构建和使用;所有这些都只是没有手动添加到本地repo和whatnot),获得更新的版本(下面讨论)和手动版本控制。

我对maven存储库的另一个问题是它们在版本中非常落后。 例如, mvnbrowser中的Logback为0.9.18,而正式为0.9.24 。 PircBot 在 mvnbrowser中为1.4.6,但正式为1.5.0 。 为何如此老版本?

问题3是我有一些甚至不存在于repos中的依赖项,比如Easier Java Persistence 。

所以

  1. 我怎样才能强制所有依赖项来自/lib
  2. 在相关的说明中,mvn可以直接从库的SVN repo构建吗? 只是好奇
  3. 如果他们也使用Maven,是否有自动方式直接从依赖站点/ svn repo获取最新版本? IE库像commons-lang或logback
  4. 有没有更好的方法来管理依赖项? (IE Ivy或者我错过了一些奇怪的POM选项)

仅供参考,这是一个包含3个模块的Java项目,项目全局依赖项和模块特定依赖项。

如果它可以与NetBeans附带的捆绑版Maven一起使用,则可以获得奖励积分。

不是重复的

  • Maven:通过相对路径向jar添加依赖项 – 不想安装到本地存储库
  • maven编译失败,因为我有一个非maven jar – 不要认为系统依赖是正确的答案
  • maven寻找新版本的依赖项 – 仍然使用(?)存储库,只是最新的(旧)版本

这不是我想要的。 我想保留SVN中的所有依赖项有很多原因(…)

我将回过头来看看我在Maven中描述的解决方案:通过相对路径 (使用基于文件的存储库)向jar添加依赖项允许实现这样的解决方案。

我对maven存储库的另一个问题是它们在版本中非常落后。 例如,mvnbrowser中的Logback为0.9.18,而正式为0.9.24。 PircBot在mvnbrowser中为1.4.6,但正式为1.5.0。 为何如此老版本?

看起来mvnbrowser索引完全过时了 (因为它没有用作存储库搜索引擎)因为maven中央存储库确实有logback-core-0.9.24.jar (logback项目正在做必须做的事情来实现这一点) )但只有一个旧的pircbot-1.4.2.jar 。 为什么? 问问pircbot团队。 无论如何,你是对的,中央存储库可能并不总是有最终版本。

问题3是我有一些甚至不存在于repos中的依赖项,比如Easier Java Persistence。

是的,这也发生了。

我怎样才能强制所有依赖项来自/ lib

如前所述,您应该仔细阅读Maven中建议的解决方案:通过相对路径向jar添加依赖项 。 此解决方案不是将库安装到本地存储库,而是使用基于文件的存储库(因此可以存储在SVN中)。 您可能错过了这一点,这与您的用例相符。 还要检查Brett对变化的回答 。

在相关的说明中,mvn可以直接从库的SVN repo构建吗? 只是好奇

没得到那一个。 你能澄清一下吗?

如果他们也使用Maven,是否有自动方式直接从依赖站点/ svn repo获取最新版本? IE库像commons-lang或logback

Maven支持版本范围 ,您可以使用允许使用“任何大于X的版本”的语法。 但为了构建可重复性,我建议使用版本范围。 您不希望构建突然失败,因为您背上发生了一些自动更新。 只有在需要修复错误或新function时才进行升级,但要明确地进行升级( 如果没有损坏,请不要修复 )。

您可能还会发现LATESTRELEASE版本标记的提及 。 我不推荐它们,原因与上面相同,甚至更少,因为它们已从Maven 3.x中删除 。

有没有更好的方法来管理依赖项? (IE Ivy或者我错过了一些奇怪的POM选项)

不能说是常春藤。 但是在Maven的土地上,如果你不能为你的项目(Nexus,Archiva,Artifactory)建立一个“公司”存储库,那么基于文件的存储库是IMO最好的方法。

设置自己的Maven存储库。

http://archiva.apache.org/