1

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

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

因此,问题:

1) 我可以将 Maven 配置为使用本地依赖项(例如,在 VCS 中共享的 jars)吗?我没有在多个项目之间共享多个依赖项,并且我的依赖项很少会更新,因此恕我直言,使用 Maven 存储库不值得。

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

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

提前感谢您的帮助。

4

3 回答 3

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:

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

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

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

xyz

  • 如果 z 在版本中更改,则 jar 应该是兼容的。
  • 如果 y 改变,你将不得不改变 youz 代码
  • 如果 x 发生变化……那么一切都需要更新。
于 2012-08-07T17:25:09.827 回答
1

您对依赖 Internet 连接的担忧是有道理的,但我认为它并没有您想象的那么糟糕。

从中央存储库下载依赖项后,它会保存到硬盘驱动器上的缓存中(位于“~/.m2/repository”)。从那时起,将使用缓存中的副本,并且不再需要 Internet 连接来编译您的应用程序。

当你在 Maven 中编译你的第一个项目时,它必须下载一大堆东西。但在那之后,所有后续的编译都会变得更快,他们不需要下载任何东西。

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

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

于 2012-08-07T18:06:56.963 回答
0

我认为只有在第一次编译时才需要 Internet 连接,但每当我更改代码时,我都会收到几个下载消息。像这样的消息:

下载: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 是在这些存储库中寻找更新,还是有其他原因经常下载这些元数据 xml?

于 2012-08-09T04:40:01.980 回答