22

我有一堆依赖于一组商业 3rd 方库的项目。我们目前没有公司存储库,所以我必须在我自己的本地存储库中安装这些库。

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

我正在考虑一个包含所有 jars 和单个 pom 文件的项目,其中包含所有组 id、工件 id、版本和文件名,然后可能只mvn install在该项目中运行,或者类似的东西。

这样的事情可能吗?


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

4

3 回答 3

47

您可以通过多次执行Maven 安装插件的install-file目标来创建 pom.xml。假设这些文件已经在本地某处可用(或者您可以使用 Wagon 插件下载它们)。

  <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 教程POM 参考

于 2012-11-05T17:29:46.830 回答
12

最近发现了一个新的解决方案。基本上,您可以在项目中创建一个本地存储库,该存储库可以与其余的源代码一起签入。在这里写博客: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,但它可以工作并且稍后将依赖项移动到公司存储库应该非常简单。

于 2013-10-02T14:44:08.100 回答
0

只是添加到@eugene-kuleshov 提供的正确示例:

  1. 一旦您在文件中配置了具有多次执行maven-install-plugin的目标,每个外部 jar 执行一次,您必须像往常一样在您的文件中使用这些 jar:install-filepom.xmlpom.xml

    <dependency>
        <groupId>org.some.group</groupId>
        <artifactId>your-artifact</artifactId>
        <version>1.0</version>
    </dependency>
    

    唯一将maven-install-plugin您的外部 jar 复制到本地.m2maven 存储库。就是这样。它不会自动将这些 jars 作为 maven 依赖项包含到您的项目中。

    这是一个小问题,但有时很容易错过。

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

于 2020-05-03T14:38:47.513 回答