2

Maven の出力で、pom ファイルで指定したものとは異なるプラグインのバージョン番号が報告されていることに気付きました。

たとえば、私の pom では、3.1 のコンパイラ プラグイン バージョンを指定します。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.1</version>
</plugin>

しかし、Maven を実行すると (パッケージ、インストールなど)、コンパイラ プラグインにバージョン 2.3.2 を使用したことが出力されます。

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile)

ローカルのpomファイル構成に勝るグローバルなmaven設定ファイルはありますか?

4

3 に答える 3

4

アップデート

プラグイン管理は、(親または同じプロジェクトから) プラグインのデフォルト構成を共有するためのメカニズムであり、有効なpom build pluginsセクションの値によってオーバーライドされるため、これは解決策ではありません。

アクティブ化され、プラグインのバージョン値を上書きするプロファイルが pom にある可能性があります (以下のデバッグの下を参照し、有効な pom を読んでください)。pom のプロファイル ノードをコメント アウト ( <!--, ) し、そうであればビルドを再実行します。-->

これが原因である場合は、pom でプロファイルを無効にするか、コマンド ラインから実行するときに Linux の場合は-P !<PROFILE_NAME>orを追加するだけです。-P \!<PROFILE_NAME>

より具体的には、pom が次のようになっている場合:

<project>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>someGroupId</groupId>
                    <artifactId>someArtifactId</artifactId>
                    <version>versionFromPluginManagement</version>
            ...
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>someGroupId</groupId>
                <artifactId>someArtifactId</artifactId>
                <version>versionFromPlugins</version>
              ...
    </build>
    <profiles>
        <profile>
            <activation>
                <activeByDefault>BOOLEAN_STRING</activeByDefault>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>someGroupId</groupId>
                        <artifactId>someArtifactId</artifactId>
                        <version>versionFromProfile</version>
        ...
  </project>

アーティファクトは、、、およびセクションsomeGroupId:someArtifactIdで定義されます。バージョンの解像度は次のとおりです。pluginManagementpluginsprofiles

  • versionFromPlugins が定義されておらず、BOOLEAN_STRING が指定されている場合false、結果のバージョンは次のようになります。versionFromPluginManagement
  • versionFromPlugins 定義され、BOOLEAN_STRING が指定されている場合false、結果のバージョンは次のようになります。versionFromPlugins
  • BOOLEAN_STRING の場合true、結果のバージョンはversionFromProfile

そうでない場合は、次を実行してください。

mvn help:effective-pom > pom.log
mvn help:effective-settings > settings.log
mvn -version > environment.log

ここにコンテンツを投稿します。

元の答え

ローカルのpomファイル構成に勝るグローバルなmaven設定ファイルはありますか?

はい、あります。実際には少なくとも 2 つあります。maven インストール フォルダーにあるグローバル フォルダーと、ローカル リポジトリ フォルダーの隣にあるユーザーごとのフォルダーです。

プロジェクトに対して maven を実行すると、これら 2 つのファイルが pom ファイルで補間され、プロジェクトのビルド時に適用される結果のファイルが計算されます。

デバッグ

  • mvn -X clean compile > build.log-X - (デバッグ) コマンド ライン フラグを使用して、詳細な出力で maven を実行します。大量の出力がある>ため、ファイルにパイプ ( ) することをお勧めします。これは、プラグインを実行する前にすべてのプラグイン プロパティとその実際の値を確認できるため、誤ったドキュメントでプラグインを使用する場合に特に役立ちます。
  • mvn help:effective-pom > pom.logプロジェクトのビルド時に適用される pom を計算します。また、アクティブなプロファイルも表示されます。
  • mvn help:effective-settings > settings.logプロジェクトのビルド時に適用される設定を計算します

最初に有効な pom を調べてから、出力をデバッグし、最後に有効な設定を調べます。

環境

まれに、問題が環境にある可能性があります。Maven は Java を使用していることに注意する必要があるため、実際の環境を知るためにこれらが必要になります。

  • java -version
  • mvn -version

Maven は、次の環境変数によってその環境を認識します (インストール手順を参照してください)。

  • M2_HOME- Maven インストール フォルダーのルートへの絶対パス
  • M2- 上記のbinフォルダー。maven 実行可能ファイルが存在する場所
  • JAVA_HOME-JDK インストール フォルダー ルートへの絶対パス - この値を変更すると、Maven が使用する Java が変更されます

もちろん、3 つの変数はすべてPATH 環境変数に含まれている必要があります。

于 2013-08-23T11:41:05.623 に答える
1

そのようなものを定義する最善の方法は、次のように pluginManagement を使用することです。

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...
  <build>
    ...
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.1</version>
        </plugin>
      </plugins>
    </pluginManagement>
    ...
  </build>
</project>

これで問題は解決するはずですが、完全なpomファイルがないため、100%確信が持てません。

于 2013-08-23T11:03:30.073 に答える