在解决依赖关系之前,使用maven安装第三方依赖关系

时间:2017-11-30 02:32:18

标签: maven

我想部署一个依赖于第三方jar的maven项目,该jar位于与我的项目源一起分发的“lib /”目录中。

执行此操作的常用方法(如in other answers所述)是让用户在构建项目之前通过键入命令将jar安装到本地maven存储库中例如shell上的mvn install:install-file

但是,此手动解决方案不适用于部署(因为要求用户手动安装依赖项是所以1998 ... )。所以我想我在install-file中指定了pom.xml目标:

<dependency>
  <groupId>edu.my.id</groupId>
  <artifactId>myartifact</artifactId>
  <version>1.0</version>
</dependency>

...

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
  <execution>
    <id>install-jar-lib</id>
    <phase>validate</phase>
    <goals>
      <goal>install-file</goal>
    </goals>
    <configuration>
      <groupId>edu.my.id</groupId>
      <artifactId>myartifact</artifactId>
      <version>1.0</version>
      <packaging>jar</packaging>
      <file>${project.basedir}/lib/myartifact.jar</file>
      <generatePom>true</generatePom>
    </configuration>
  </execution>
</executions>

问题是maven尝试在install-file运行之前解析依赖关系,即使我指定它早在validate阶段运行。因此它抱怨它无法找到依赖。

这个问题一直是asked before,并提供了一些令人不快的复杂解决方案,例如:

  1. maven-install-plugin阶段运行clean,并要求用户在构建工件之前运行mvn clean
  2. 设置多个模块,如here所述。
  3. 使用<systemPath>将jar加载为系统库。 (这不符合我的要求,因为我使用maven-dependency-plugin将依赖项jar复制到已部署的应用程序目录中,该目录忽略了系统库。)
  4. 编写自定义插件。
  5. 这些都不能让我满意。这似乎是任何构建系统遇到的例行任务。必须有一种更简单的方法来安装与maven的依赖关系。

1 个答案:

答案 0 :(得分:0)

对我有用的解决方案是使用 install-file <systemPath>

<dependency>
  <groupId>edu.my.id</groupId>
  <artifactId>myartifact</artifactId>
  <version>1.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/lib/myartifact.jar</systemPath>
</dependency>

...

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
  <execution>
    <id>install-jar-lib</id>
    <phase>validate</phase>
    <goals>
      <goal>install-file</goal>
    </goals>
    <configuration>
      <groupId>edu.my.id</groupId>
      <artifactId>myartifact</artifactId>
      <version>1.0</version>
      <packaging>jar</packaging>
      <file>${project.basedir}/lib/myartifact.jar</file>
      <generatePom>true</generatePom>
    </configuration>
  </execution>
</executions>

这样,当Maven编译项目时,它将第三方依赖项解析为系统库。但它也会将库安装到本地maven存储库中,以便maven-dependency-plugin的{​​{1}}目标能够找到它。