【问题标题】:Install a 3rd-party dependency with maven before dependencies are resolved在解决依赖关系之前使用 maven 安装 3rd-party 依赖项
【发布时间】:2018-05-13 21:10:36
【问题描述】:

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

执行此操作的常用方法(如 inotheranswers 所述)是让用户在构建项目之前将 jar 安装到本地 maven 存储库中,方法是在以下位置键入 mvn install:install-file 等命令外壳。

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

<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 阶段运行。因此它抱怨它找不到依赖项。

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

  1. clean 阶段运行maven-install-plugin,并要求用户在构建工件之前运行mvn clean
  2. 设置多个模块,如here 所述。
  3. 使用&lt;systemPath&gt; 将jar 作为系统库加载。 (这不符合我的要求,因为我使用maven-dependency-plugin 将依赖jar 复制到部署的应用程序目录中,忽略系统库。)
  4. 编写自定义插件。

这些都不能让我满意。这似乎是任何构建系统遇到的例行任务。用maven安装依赖一定有更简单的方法。

【问题讨论】:

    标签: maven


    【解决方案1】:

    对我有用的解决方案是使用 both install-file &lt;systemPath&gt;

    <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 编译项目时,它会将 3rd-party 依赖解析为系统库。但它也会将该库安装到本地 maven 存储库中,以便 maven-dependency-plugincopy-dependencies 目标能够找到它。

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2019-04-27
      • 2015-04-03
      • 2014-09-05
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多