我们正在尝试管理由多个Eclipse插件组成的项目。
一个插件依赖于第三方插件。它从名为bpmn2的库中导入一个类。该库是一个jar文件,不包含在Maven远程存储库中。
在本地,在Eclipse中,我们将库检出到工作空间中,并在Eclipse项目的类路径中引用。插件清单未明确声明对bpmn2的依赖性。哪个在本地工作......
我们尝试使用Jenkins进行持续集成。 Multi-Plug-in-Project使用Maven和多个POM文件使用Maven tycho插件进行管理。
问题是Maven并不关心本地存在的库bpmn2(当然)。所以我们认为使用Maven install:install将bpmn2安装到本地Maven存储库
./mvn install:install-file -Dfile=/home/someUser/bpmn2/org.eclipse.bpmn2_0.7.0.201111021300.jar -DgroupId=org.eclipse.bpmn2 -DartifactId=bpmn2 -Dversion=0.7.0 -Dpackaging=jar -DlocalRepositoryPath=/var/lib/jenkins/localRep/
并使用库的依赖项来调整相应的POM
<dependencies>
<dependency>
<groupId>org.eclipse.bpmn2</groupId>
<artifactId>bpmn2</artifactId>
<version>0.7.0</version>
<type>jar</type>
</dependency>
</dependencies>
会奏效。但它没有。
Maven的输出是:
[ERROR] Cannot resolve project dependencies:
[ERROR] Software being installed: modeltype.bpmn2 1.0.0.qualifier
[ERROR] Missing requirement: modeltype.bpmn2 1.0.0.qualifier requires 'bundle org.eclipse.bpmn2 0.7.0' but it could not be found
[ERROR]
问题是:
我们怎样才能更好地整合第三方图书馆? 我认为,本地类路径引用不是更好图像的最佳解决方案。是否每个为项目开发的人都应安装bpmn2库并仅使用清单中的依赖项?
Maven我们做错了什么?本地存储库是
/var/lib/jenkins/localRep
并且在将库安装到存储库之后,似乎创建的目录结构没问题。
/org/eclipse/bpmn2/bpmn2/0.7.0/bpmn2-0.7.0.jar
有人可以帮忙吗?
答案 0 :(得分:5)
最简单的解决方案是为您的公司设置存储库服务器,并通过该服务器代理您的所有呼叫。
当您需要从远程位置(例如maven central)下载工件时,它可以充当代理,但它也可以设置存储库来存储非公共分布的工件。
这里详细记录了整个设置过程 - &gt; http://www.sonatype.com/books/nexus-book/reference/
请注意,该产品的开源版非常好,足以满足您的需求。
公平地说,有一种名为Artifactory的竞争产品。你可以在这里阅读 - &gt; http://www.jfrog.com/products.php
答案 1 :(得分:5)
我有一个类似的场景,我需要在Maven Web项目中包含第三方库(未在maven存储库中加载)。
以下方法帮助我们使代码可移植。
<强>解决方案:强>
在WEB_INF下创建“lib”目录,如下所示:
<<Project_Base_Dir>>/src/main/webapp/WEB-INF/lib
将第三方JAR复制到LIB目录。
更新了POM.xml以使用SYSTEMPATH,如下所示:
<dependency>
<groupId>GROUP_ID</groupId>
<artifactId>ARTIFACT_ID</artifactId>
<version>VERSION</version>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/<<JAR_FILENAME>></systemPath>
<scope>system</scope>
</dependency>
答案 2 :(得分:0)
如果您无法使用Nexus,则可以使用范围系统:
系统:您的某些阶段需要此依赖关系 项目的生命周期,但是 系统专用。 使用此范围 气馁:这被认为是一个 “先进”的功能和应该 只有在你真正理解的时候才能使用 其使用的所有后果, 如果没有,这可能会非常困难 实际上无法量化。 根据定义,此范围呈现您的 构建非便携式。它可能是 某些边缘情况下必要的。该 系统范围包括 指向的
<systemPath>
元素 这个的实际位置 对本地机器的依赖。它是 因此用于指代一些神器 预计将出现在给定的 本地机器不在存储库中; 并且其路径可能会有所不同 机器到机器。systemPath
元素可以指环境 路径中的变量:${JAVA_HOME}
例如。
您可以将其与
一起使用小心,使用它可能会使你的构建不可移植。