今天我试图将Maven“卖”给我的项目团队,但遇到了这个难以理解的用例场景。
用户希望将项目的依赖项存储在/ lib文件夹中,并从该文件夹中解析其依赖项。
我想知道这是否可能。他们不想维护工件存储库服务器。
答案 0 :(得分:2)
问题是为什么用户想要将项目依赖项存储在/ 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中声明它并将其包含在所有项目中。
答案 1 :(得分:2)
是的,你可以通过设置范围为system
的decencies来实现这一点,例如
<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中的依赖关系管理正在消除使用它的很大一部分好处,但不是全部。您仍然可以使用所有测试,报告和发布插件。
顺便说一下,我无法相信那里的Java项目没有使用Maven或Ivy。对你有好处,对你的团队不利。