强制Maven使用内部和外部依赖jar



我已经将Jenkins集成到了我的Maven Selenium Java项目中。我有一个"SeleniumUtils-0.0.2-14.0.0.0.jar",在POM.xml中称为:

<dependency>
<groupId>com.disney.gqe</groupId>
<artifactId>SeleniumUtils</artifactId>
<version>0.0.2-14.0.0.0</version> 
</dependency>

这个罐子是由以前的程序员在本地交给我的。当时没有实现Jenkins构建。该项目在来自m2/repo文件夹的Eclipse引用jar中本地运行良好。当我在Jenkins中使用"clean install"构建时,我会收到一个错误:从中心下载:https://repo.maven.apache.org/maven2/com/disney/gqe/SeleniumUtils/0.0.2-14.0.0.0/SeleniumUtils-0.0.2-14.0.0.0.jar

我不想让Maven在中央搜索这个罐子,因为我在本地有它。如何在Jenkins repo文件夹中本地添加文件并构建项目?

@JFMeier是绝对正确的,您应该将依赖项放在托管的Maven存储库中。

然而,如果你没有,你可以这样做:

<dependency>
<groupId>com.disney.gqe</groupId>
<artifactId>SeleniumUtils</artifactId>
<version>0.0.2-14.0.0.0</version> 
<scope>system</scope>
<systemPath>path/to/the/jar</systemPath>
</dependency>

请注意,我不是说这是个好主意,但具有system作用域的依赖项将阻止Maven从外部查找依赖项。

系统范围的依赖关系的问题是,现在每当有人(其他人(需要进行构建时,他们都必须将jar放在与您相同的位置。您可以通过在每个用户的settings.xml中引入一个属性参数来避免这种情况,但现在您有一个需要管理的维护问题。

您已收到警告。

如果你有一个Jenkins,你可能有一个Nexus或Artifactory(这至少是存储你构建的工件的推荐位置(。这个Nexus或Artifactory也是放置库的地方,就像你提到的那个。

如果使用"clean install"构建项目,则默认情况下它将清理local.m2存储库,并尝试从本地pom.xml或Settings.xml文件的可用存储库列表中下载。

如果您已经在repo中本地复制了jar,那么尝试只使用"install"而不使用"clean"来构建项目。

您可以根据需要强制执行updatePolicy,以在$USER_HOME/.m2/settings.xml下实现它

http://maven.apache.org/settings.html#Repositories

updatePolicy:此元素指定尝试更新的频率发生。Maven将比较本地POM的时间戳(存储在存储库的maven元数据文件(。选择如下:始终,每日(默认(,间隔:X(其中X是以分钟为单位的整数(或者永远不会。

最新更新