是否有任何插件可以加载/使用非Maven依赖项?

时间:2011-02-05 09:44:06

标签: java maven-2

我需要在我的项目中使用第三方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/ ...

8 个答案:

答案 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 Depenciesthis问题。

答案 3 :(得分:2)

以你的例子为例Dresden OCL有超过20个JAR文件,你需要将它分发给许多开发人员,最好的解决方案是在某个地方安装一个存储库管理器(如nexus或ar​​tifactory),花点时间上传这些文件。罐到该存储库,并使用它们。最好的办法是将它们放在一个私有的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)

这里提到的“mvn install:install-file”将帮助您将jar安装到本地存储库中。但是,如果您希望随后向项目自动化的开发人员提供这些jar,请将相关部分复制到项目中每个人都可用的存储库中,并使用该标记使该存储库可用,例如通过将所有文件检入到SVN。例如,请参阅http://code.google.com/p/codebistro/wiki/BuildNumber#Maven_Plugin_Example,其中引用了SVN托管的存储库。

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>