今天,我试图向我的项目团队“推销” Maven,但遇到了这个让我难过的用例场景。
用户希望将项目的依赖项存储在 /lib 文件夹中,并从该文件夹中解析其依赖项。
我想知道这是否很有可能。他们不想维护工件存储库服务器。
今天,我试图向我的项目团队“推销” Maven,但遇到了这个让我难过的用例场景。
用户希望将项目的依赖项存储在 /lib 文件夹中,并从该文件夹中解析其依赖项。
我想知道这是否很有可能。他们不想维护工件存储库服务器。
问题是用户为什么要将项目依赖项存储在 /lib 文件夹中?
依赖管理是 Maven 的很大一部分,使用工件存储库允许您将库作为依赖项包含在内,并且只需要管理一个 JAR 实例。如果您有十个项目引用一个 JAR,那么必须在所有这十个项目中维护该 JAR 将意味着 /lib 项目文件夹中有 10 个 JAR 文件。
如果您想升级 JAR 文件,那将是一场噩梦。
不幸的是,如果您想使用 maven 并获得所有好处,那么工件存储库就是您要走的路。
例子
有一个名为 common.jar 的项目库。由项目 A、B 和 C 使用
我创建了一个新项目。如果我想在我的项目中包含 common.jar,我很可能会转到项目 A、B 或 C 并复制并粘贴 JAR。(不是特别可靠的方法)
如果我有一个 Maven 存储库,我只需向 pom 添加一个依赖项
<dependency>
<group>com.example.group</group>
<artifactId>common</artifactId>
<version>1.0</version>
</dependency>
这意味着所有项目都将使用该库的一个中央版本。您甚至可以在父 pom 中声明它并将其包含在所有项目中。
是的,您可以通过设置范围来做到这一点system
,例如
<dependency>
<groupId>something</groupId>
<artifactId>something</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${build.dir}/lib/library.jar</systemPath>
</dependency>
过去,在使用商业 jar 文件时,我不得不使用它,而我工作的客户不允许将商业 jar 放入内部 nexus 存储库中。
正如@cowls 所提到的,不在Maven 中使用依赖管理正在消除使用它的很大一部分好处,但不是全部。你仍然可以使用所有的测试、报告和发布插件。
顺便说一句,我不敢相信有没有使用 Maven 或 Ivy 的 Java 项目。对你有好处,对你的团队不利。