2012-08-07 72 views
1

我有一个版本控制系统(git)中的小型Java项目,由4位开发人员共享。我正在考虑在这个项目中使用Maven作为构建工具。Maven:知识库

依赖管理是一个想要的功能,但我不想: - 依赖的自动更新(因为这可能会破坏我的软件)。 - 依赖Internet连接从远程存储库下载依赖关系,并能够编译我的代码。

因此,问题:

1)我可以配置Maven使用在VCS共享本地依赖性(如罐)?我没有几个项目之间共享的依赖项,我的依赖项很少会更新,所以使用Maven仓库对我来说是不值得的。

2)如果我选择使用Maven仓库,我可以在我的本地网络中配置一个仓库吗?我不想要远程存储库镜像或远程存储库的入口。我想要一个独立的存储库与我的依赖关系,位于本地网络中的服务器上。

3)如果我在远程存储库中使用默认的Maven方法,可以在第一次下载所有依赖关系后关闭依赖关系更新吗?

在此先感谢您的帮助。

+0

依赖关系将不会自动更新,它们将保持与'pom.xml'文件中指定的''相同。例外是_-SNAPSHOT_版本,不应在生产中使用。 – matsev 2012-08-07 18:10:43

回答

3

答1:

是的,你可以,谷歌的系统范围的依赖性,但:这不是一个好主意,这样做,因为您将删除的关键特征之一。

<dependency> 
    <groupId>com.mycompany</groupId> 
    <artifactId>app-lib</artifactId> 
    <version>3.1.0</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/libs/app-lib-3.1.0.jar</systemPath> 
</dependency> 

答2:

是,您可以: - Artifactory - Nexus

答3:

当然可以。对于这种情况,您可以使用---离线标志更好的方法:释放所有依赖项。

一些想法: 你想使用依赖管理系统,而不使用依赖管理,听起来很奇怪。

如果您担心,您的库中的更改可能会破坏您的代码,请不要使用SNAPSHOT。 尝试一种版本方案。我们使用

X.Y.Z

  • 如果在放开Z的变化,罐子应该是兼容的。
  • 如果y发生变化,您将不得不更改youz代码
  • 如果x更改...以及更换需要更新。
1

您对依赖互联网连接的担忧是有道理的,但我认为这并不像您想象的那么糟糕。

从Central Repository下载依赖项后,它将被保存到硬盘驱动器(位于“〜/ .m2/repository”)的缓存中。从此,使用缓存中的副本,并且不再需要Internet连接来编译应用程序。

当你在Maven中编译你的第一个项目时,它将不得不下载一个垃圾负载的东西。但在此之后,所有后续的编译将更快,他们不需要下载任何内容。

此外,Maven的版本控制方案使得一旦将它们部署到中央存储库后,所有“发布”版本的依赖项都不能更改。例如,如果我使用“commons-io”的版本“2.2”,我知道该版本的库将始终保持不变。如果不发布新版本,则无法进行更改。

“快照”版本,但是,可以更改。如果库的版本是快照,则它将以“-SNAPSHOT”结尾(例如,“1.2-SNAPSHOT”表示库最终将以“1.2”形式发布)。我不认为中央存储库允许创建快照。无论如何,你不应该在生产代码中使用它们。

+0

您的本地回购可以位于您硬盘上的任何位置。这是在你的maven配置文件中设置的。另外+1提及快照。 – 2012-08-07 18:11:29

0

我认为互联网连接仅在第一次编译时需要,但是每当我更改代码时我都会收到几个下载消息。消息数这样的:

下载:http://repo.maven.apache.org/maven2/org/eclipse/core/resources/maven-metadata.xml

下载:http://repository.springsource.com/maven/bundles/external/org/eclipse/core/resources/maven-metadata.xml

下载:http://repository.springsource.com/maven/bundles/release/org/eclipse/core/resources/maven-metadata.xml

下载:https://oss.sonatype.org/content/repositories/snapshots/org/eclipse/core/resources/maven-metadata.xml

这是为什么? Maven是否在这些版本库中寻找更新,或者是否有其他原因需要经常下载这些元数据xmls?