11

プロジェクトで Maven を使用しており、インターネットにアクセスできないマシンでビルドを実行する必要があります。

プロジェクトのビルドをテストするとすべてが機能しますが、後でビルドを実行すると、mavenが mvn-plugins を更新しようとし、このsh t* がビルドを壊しています。

私の設定ファイル:mvnのsettings.xml 。

    <profile>
      <id>blaProfile</id>
      <repositories>
        <repository>
          <id>blaRepo</id>
          <url>file://${bla.3rdParty.home}/maven/.m2/repository</url>
          <layout>default</layout>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>blaRepo</id>
          <url>file://${bla.3rdParty.home}/maven/.m2/repository</url>
          <layout>default</layout>
        </pluginRepository>
      </pluginRepositories>
    </profile>

  <activeProfiles>
    <activeProfile>blaProfile</activeProfile>
  </activeProfiles>

そして、私は自分のmavenをparamsで実行しました:

mvn -npu -bla.3rdParty.home="$(THE_CORRECT_PATH)" package

Maven がいくつかの mvn-plugins をしばらく更新しようとしているのを見ましたが、オプションは次のとおりです。

-npu,--no-plugin-updates      Suppress upToDate check for any relevant

このアップデートで動作するはずです。

それについての助けを待っています!

前もって感謝します!


更新(1):
私が見ているのは、設定を使用できるということです:

<usePluginRegistry>true</usePluginRegistry>

私のsettings.xml内で、これにより、${user.home}/.m2内 にplugin-registry.xmlがあり、mavenプラグインのバージョンを構成および強制できます。

しかし、それは機能していません!:(

4

6 に答える 6

10

オフラインにする前に、次を実行します。

mvn dependency:go-offline

これにより、プロジェクトをビルドするために必要なすべての依存関係とプラグインが ~/.m2/repository にダウンロードされます。

実行したら、「-o」フラグを使用してプロジェクトをオフラインでビルドできます。

mvn install -o
于 2009-08-07T15:49:55.610 に答える
5

プラグインを .m2/repository フォルダーにキャッシュするには、すべてのプラグインを明示的に指定する必要があります。mvn <maven-plugin-name>:help

pom.xmlの<plugins>orセクションで各プラグインの明示的なバージョンを指定する必要もあります。<pluginsManagement>

<plugin> 
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven.surefire</groupId>
      <artifactId>surefire-testng</artifactId>
      <version>2.19</version>
    </dependency>
  </dependencies>
</plugin>

mvn install -oこれは、 が同じプラグイン バージョンを使用していることを確認するために必要です。

mvn dependency:go-offlineもちろん、コンパイルとテストの依存関係を処理するために実行する必要もあります。

mvn assembly:help compiler:help enforcer:help exec:help failsafe:help install:help jar:help resources:help surefire:help mvn dependency:go-offline mvn compile --offline

于 2016-09-05T18:47:46.050 に答える
5

Maven Go-offline + 分離された Docker マルチステージ イメージ ビルド

私の答えは、ローカル ビルドまたは Docker 化された環境の両方であり、Docker イメージのビルド方法の性質から分離されています。これは Maven を使用し3.6.3-jdk-8ます。

この回答により、CI がダウンロード、コンパイル、テスト、パッケージ化に費やした時間を正確に知ることができます...

最後に、オフラインにするための Jira に関する古い質問への回答https://issues.apache.org/jira/browse/MDEP-82?focusedCommentId=16997793&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment -tabpanel#comment-16997793

  • pom.xml依存関係 を更新する
    • maven-dependency-plugin
    • surefire-junit-platform
  • go-offline依存関係の解決を呼び出す
  • mvnスイッチを使用して任意のコマンドを呼び出す--off-line

プラグインの最新バージョンを設定する

@@ -23,6 +23,9 @@
         <junit-jupiter.version>5.5.2</junit-jupiter.version>
         <common-io.version>2.6</common-io.version>
         <jacoco-maven-plugin.version>0.8.4</jacoco-maven-plugin.version>
+        <!-- https://issues.apache.org/jira/browse/MDEP-82 -->
+        <maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
+        <surefire-junit-platform.version>2.22.2</surefire-junit-platform.version>
         <maven-release-plugin.version>2.5.3</maven-release-plugin.version>
         <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
         <maven-surefire-report-plugin.version>2.22.2</maven-surefire-report-plugin.version>
...
...
     <build>
         <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>${maven-dependency-plugin.version}</version>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
@@ -135,6 +143,11 @@
                     <target>${java.version}</target>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.surefire</groupId>
+                <artifactId>surefire-junit-platform</artifactId>
+                <version>${surefire-junit-platform.version}</version>
+            </plugin>

オフライン キャッシュを作成する

  • これにより、すべての依存関係がダウンロードされます
  • すべての依存関係をダウンロードするには 3 分以上
FROM maven:3.6.3-jdk-8 AS dependencies-downloaded
...
...
COPY pom.xml /usr/src/app/pom.xml
COPY settings.xml /usr/src/app/settings.xml
WORKDIR /usr/src/app
RUN mvn -f pom.xml -s settings.xml dependency:resolve-plugins dependency:go-offline

ここに画像の説明を入力

--offline でコンパイルを呼び出す

  • コンパイルに同じ画像を再利用できます
  • 何もダウンロードされないため、7 秒しかかかりません
FROM dependencies-downloaded AS compile
COPY app /usr/src/app
WORKDIR /usr/src/app
RUN mvn -f pom.xml -s settings.xml compile --offline

ここに画像の説明を入力

--offline でテストを呼び出す

  • テスト用に同じ画像を再利用できます
  • ダウンロードなしでテストケースを実行するのに18秒かかります
FROM compile AS tests
WORKDIR /usr/src/app
RUN mvn -f pom.xml -s settings.xml test --offline

ここに画像の説明を入力

--offline でパッケージを呼び出す

  • 最終的な jar に同じ画像を再利用できます
  • 以前の Docker イメージで実行されたテストもスキップする
  • 以前よりも少なくなった
FROM tests AS package
WORKDIR /usr/src/app
RUN mvn -f pom.xml -s settings.xml package -Dmaven.test.skip=true --offline

ここに画像の説明を入力

最終的なランタイム イメージは、パッケージの Docker イメージです。

FROM JRE
COPY --from package /usr/src/app/target /bin
...
...
于 2019-12-17T02:38:27.443 に答える
1

いくつかのデバッグの後、次のように指定すると、(執筆時のmaven-dependency-pluginバージョン) がプラグインの依存関係を解決できないことがわかりました。3.1.1

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>3.0.0-M3</version>
 <dependencies>
  <dependency>    <--- this is not going to be resolved by dependency:go-offline command !!!
   <groupId>org.apache.maven.surefire</groupId>
   <artifactId>surefire-junit4</artifactId>
   <version>3.0.0-M3</version>
  </dependency>
 </dependencies>
</plugin>

その後、go-offline-maven-pluginどれがうまくいくかを見つけました!詳細については、 https://github.com/qaware/go-offline-maven-pluginを参照してください。

<plugin>
 <groupId>de.qaware.maven</groupId>
 <artifactId>go-offline-maven-plugin</artifactId>
 <version>x.y.z</version>
</plugin>

現在のバージョンは https://mvnrepository.com/artifact/de.qaware.maven/go-offline-maven-pluginで、Maven の問題はhttps://issues.apache.org/jira/browse/MDEP-82で確認できます

于 2019-11-08T13:21:08.603 に答える
0

これは、プラグインのバージョンが正しいかどうかを判断するために、Maven がローカルで利用できるメタデータを取得していないために発生すると考えられます。プラグインの正確なバージョンを指定する場合 (これはとにかく再現性のために良い考えです)、チェックを行う必要がないため、リモート リポジトリへの接続を試行しません。

正確なバージョンを指定するとは、プロジェクトの POM でバージョンをプラグイン宣言に追加する必要があることを意味します。例えば:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <!-- set the version explicitly-->
    <version>2.0</version>
  </plugin>
</plugins>

リポジトリ ミラーを設定することで、Maven が Central の代わりに内部リポジトリを使用するように強制することもできます。リポジトリ マネージャーとミラーの使用の詳細については、この回答を参照してください。

含めた構成では、リモートリポジトリがローカルリポジトリを指すように設定していますが、これは良い考えではありません。オフラインで実行するには、コマンド ラインで -o を渡すか、これを settings.xml に追加する必要があります。

<offline>true</offline>
于 2009-08-07T14:45:00.467 に答える