用于安装多个第三方商业库的Maven POM文件

时间:2012-11-05 17:14:46

标签: maven maven-2 maven-3

我有一堆项目依赖于一组商业第三方库。我们目前没有公司存储库,因此我必须在我自己的本地存储库中安装库。

为每个文件运行mvn install:installFile -Dpackaging=jar -Dfile=<file> -DgroupId=<groupId> -DartifactId=<artifactId> -Dversion=<version>相当繁琐。可以创建一个bat文件,但是有没有办法用maven做到这一点?

我正在考虑一个包含所有jar和单个pom文件的项目,其中包含所有组ID,工件ID,版本和文件名,然后是在该项目中运行mvn install的可能性,或者是那些线。

这样的事情可能吗?


注意:我正在使用Maven 3,但Maven 2兼容解决方案也不错。

3 个答案:

答案 0 :(得分:40)

您可以创建具有多个install-file Maven安装插件目标的pom.xml。假设这些文件已在某处本地可用(或者您可以下载它们using Wagon plugin)。

  <project>
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.somegroup</groupId>
    <artifactId>my-project</artifactId>
    <version>1.0</version>

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.4</version/>
          <executions>
            <execution>
              <id>install1</id>
              <phase>package</phase>
              <goals>
                <goal>install-file</goal>
              </goals>
              <configuration>
                <file>lib/your-artifact-1.0.jar</file>
                <groupId>org.some.group</groupId>
                <artifactId>your-artifact</artifactId>
                <version>1.0</version>
                ... other properties
              </configuration>
            </execution>
            <execution>
              <id>install2</id>
              <phase>package</phase>
              <goals>
                <goal>install-file</goal>
              </goals>
              ... etc

            </execution>
            ... other executions
          </executions>
        </plugin>
      </plugins>
    </build>
  </project>

所以,上面的pom片段mvn package应该可以解决问题。

有好Maven POM tutorialPOM reference

答案 1 :(得分:11)

最近发现了一种新的解决方案。基本上,您可以在项目中创建一个本地存储库,可以使用其余的源代码进行检查。在此处发表了博客:http://www.geekality.net/?p=2376

要点是将依赖项部署到项目中的文件夹中。

mvn deploy:deploy-file
    -Durl=file:///dev/project/repo/
    -Dfile=somelib-1.0.jar
    -DgroupId=com.example
    -DartifactId=somelib
    -Dpackaging=jar
    -Dversion=1.0

然后让Maven知道它并通过pom.xml正常使用依赖声明。

<repositories>
    <repository>
        <id>project.local</id>
        <name>project</name>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.example</groupId>
    <artifactId>somelib</artifactId>
    <version>1.0</version>
</dependency>

不是非常Maven'y,但它的工作原理以及以后将依赖项移动到公司存储库应该非常简单。

答案 2 :(得分:0)

只需添加到@ eugene-kuleshov提供的正确示例中即可:

  1. 一旦您在maven-install-plugin文件中为目标install-file配置了pom.xml,并且执行了多次,每个外部jar执行一次,则必须在{ {1}}照常:

    pom.xml

    <dependency> <groupId>org.some.group</groupId> <artifactId>your-artifact</artifactId> <version>1.0</version> </dependency> 仅将您的外部jar复制到本地maven-install-plugin Maven存储库。而已。它不会自动将这些jar作为项目的Maven依赖项包含在内。

    这是次要的要点,但有时很容易错过。

  2. 只要将外部jar安装到.m2存储库(这是默认设置),您就不必在<repositories>中包含任何pom p>