簡體   English   中英

在解決依賴關系之前,使用Maven安裝第三方依賴關系

[英]Install a 3rd-party dependency with maven before dependencies are resolved

我想部署一個依賴於第三方jar的maven項目,該jar位於與項目源一起分發的“ lib /”目錄中。

通常的方式做到這一點(如解釋 其他 的答案 )是讓用戶安裝jar到本地Maven倉庫建設項目,通過鍵入命令,如前mvn install:install-file在shell。

但是,此手動解決方案不適用於部署(因為要求用戶手動安裝依賴項為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>

問題在於,即使我將其指定為早於validate階段運行,maven也會嘗試在install-file運行之前解決依賴關系。 因此,它抱怨無法找到依賴關系。

之前已經 這個問題,並且提供了一些令人不愉快的復雜解決方案,例如:

  1. clean階段運行maven-install-plugin ,並要求用戶在構建構件之前運行mvn clean
  2. 設置多個模塊,描述在這里
  3. 使用<systemPath>將jar加載為系統庫。 (這不符合我的要求,因為我正在使用maven-dependency-plugin將依賴項jar復制到已部署的應用程序目錄中,該目錄忽略了系統庫。)
  4. 編寫一個自定義插件。

這些都不滿足我。 這似乎是任何構建系統遇到的日常任務。 必須有更簡單的方法來使用maven安裝依賴項。

為我工作的解決方案是使用這兩種 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-plugincopy-dependencies目標能夠找到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM