我需要在我的项目中使用第三方JAR库(实际上它是Dresden OCL for Eclipse),而不是作为Maven工件提供的。相反,它只是一个可下载的JAR文件。我是否可以像使用<dependencies>
一样指示Maven使用此JAR文件?我想应该有一些插件用于此目的?
PS。我只是不想在我的SVN存储库中添加35Mb的第三方二进制文件。
以这种方式配置会很高兴:
<build>
<plugins>
<plugin>
<groupId>com.example</groupId>
<artifactId>non-maven-dependencies-injector</artifactId>
<configuration>
<libraries>
<library>http://www.example.com/something*.jar</library>
<library>http://www.example.com/something-else*.jar</library>
</libraries>
</configuration>
</plugin>
<plugins>
</build>
此插件将1)下载这些JAR文件,2)将它们作为依赖项添加到pom.xml
中。也许这个插件可以将它们存储在~/.m2/temp/
...
答案 0 :(得分:12)
是的,您可以使用maven-install插件将其安装到本地存储库
mvn install:install-file -Dfile=your-artifact-1.0.jar \
-DgroupId=org.some.group \
-DartifactId=your-artifact \
-Dversion=1.0 \
-Dpackaging=jar \
-DgeneratePom=true
如果您希望其他团队成员能够下载此依赖项而无需安装它们,则需要设置自己的工件仓库,并使用maven-deploy-plugin以与您相同的方式部署工件。安装它localy。
答案 1 :(得分:6)
是。 maven-external-dependency-plugin支持此(使用非Mavenized依赖项)。
示例:
<artifactItem>
<groupId>jwbroek.cuelib</groupId>
<artifactId>cuelib</artifactId>
<version>${cuelib-version}</version>
<packaging>jar</packaging>
<downloadUrl>http://cuelib.googlecode.com/files/cuelib-${cuelib-version}.jar</downloadUrl>
<checksum>d03b6b960b3b83a2a419e8b5f07b6ba4bd18387b</checksum>
</artifactItem>
它还可以extract artifacts from zip files:
<artifactItem>
<groupId>mediautil</groupId>
<artifactId>mediautil</artifactId>
<version>${mediautil-version}</version>
<packaging>jar</packaging>
<install>true</install>
<force>false</force>
<downloadUrl>http://downloads.sourceforge.net/project/mediachest/MediaUtil/Version%201.0/mediautil-1.zip</downloadUrl>
<checksum>aa7ae51bb24a9268a8e57c6afe478c4293f84fda</checksum>
<extractFile>mediautil-${mediautil-version}/mediautil-${mediautil-version}.jar</extractFile>
<extractFileChecksum>e843cd55def75dce57123c79b7f36caca4841466</extractFileChecksum>
</artifactItem>
答案 2 :(得分:2)
您可以在pom.xml中使用“system”-scope来获取本地库依赖项:
系统
这个范围类似于 提供除了你必须 提供包含它的JAR 明确。工件总是如此 可用,并没有查找 库中。systemPath
仅在依赖范围是系统时使用。否则,如果设置了此元素,则构建将失败。路径必须是绝对路径,因此建议使用属性来指定特定于机器的路径(更多关于下面的属性),例如$ {java.home} / lib。由于假设系统范围依赖关系是先验安装的,因此Maven不会检查项目的存储库,而是检查以确保文件存在。如果没有,Maven将无法构建,并建议您手动下载并安装它。
<dependency>
<groupId>some.id</groupId>
<artifactId>artifact</artifactId>
<version>1.2.3</version>
<scope>system</scope>
<systemPath>${basedir}/path/to/jarFile.jar</systemPath>
</dependency>
AFAIK,你可以使用你想要的groupId,artifactId和版本。请参阅Maven System Depencies和this问题。
答案 3 :(得分:2)
以你的例子为例Dresden OCL有超过20个JAR文件,你需要将它分发给许多开发人员,最好的解决方案是在某个地方安装一个存储库管理器(如nexus或artifactory),花点时间上传这些文件。罐到该存储库,并使用它们。最好的办法是将它们放在一个私有的groupId中,所以 if 它们会在某个时候发布到m2 repo,你最终不会有名字冲突。
另一点,就是询问德累斯顿OCL维护人员,他们是否可以提供m2仓库。现在m2eclipse是一个日食孵化器项目,这可能会引起更多人的兴趣。
答案 4 :(得分:0)
您可以将其安装在本地或将其部署到您的站点本地(例如公司范围)存储库。 如果使用maven在配置的存储库中找不到依赖项,它甚至会为您提供所需的命令:
然后,使用以下命令安装它: mvn install:install-file -DgroupId = mygid -DartifactId = myaid -Dversion = 1.0 -Dpackaging = jar -Dfile = / path / to / file
或者,如果您拥有自己的存储库,则可以在那里部署文件: mvn deploy:deploy-file -DgroupId = mygid -DartifactId = myaid -Dversion = 1.0 -Dpackaging = jar -Dfile = / path / to / file -Durl = [url] -DrepositoryId = [id]
请注意:这样您只需将.jar添加到存储库中,就不会有pom来指定瞬态依赖项。因此,如果您的第三方库具有自己的依赖关系,则必须手动将它们添加到您的pom.xml中,因为没有自动解析。
答案 5 :(得分:0)
P.S。安全前往SV!
答案 6 :(得分:0)
这是一种不同的方法,可以在项目目录中添加Maven存储库,将其用作pom.xml
中的存储库,并与任何签出该项目的人共享SVN上的存储库。 Crosspost from here.
在项目目录中,创建一个名为repo
的文件夹,我们将其用作基于文件夹的Maven存储库。
将以下文件存储库添加到项目pom.xml
:
<repositories>
<repository>
<id>file.repo</id>
<url>file://${project.basedir}/repo</url>
</repository>
</repositories>
使用以下命令将外部jar部署到文件存储库:
mvn deploy:deploy-file
-Durl=file:///absolute/path/to/your-project/repo \
-DrepositoryId=file.repo \
-Dfile=path-to-your.jar \
-DgroupId=some.external.project.group \
-DartifactId=the-artifact-name \
-Dversion=1.0 \
-Dpackaging=jar;
在此之后,您可以使用上面传递的groupId,artifactId和version的值,在项目pom.xml
中添加对jar的正常依赖关系。然后,您可以将repo文件夹添加到SVN,并将更改提交到pom.xml
。任何检查项目的开发人员现在都可以毫不费力地使用相同的依赖项。
答案 7 :(得分:0)
I think the below answer will help you...just place jar files on your SVN and tell them all to e synch with SVN and here the ${lib.directory} will be t he local path
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>db2jcc9</id>
<phase>compile</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.ibm</groupId>
<artifactId>db2jcc</artifactId>
<version>9</version>
<packaging>jar</packaging>
<file>${lib.directory}\db2jcc-9.jar</file>
</configuration>
</execution>
</executions>
<plugin>