web-dev-qa-db-ja.com

デフォルトのMavenコンパイラ設定

現在、小さなJavaアプリケーションを自分で作成し、いくつかのmaven pom.xmlファイルを使用しています。すべてのmavenパッケージをjdk 1.6でコンパイルできるようにしたいのですが、 tすべてのPOMに手動で設定せずにそれを行う良い方法を見つける-私はコピーアンドペーストにうんざりしています

<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
 <source>1.6</source>
 <target>1.6</target>
</configuration>

私が生成するすべてのpom.xmlファイルで。

この問題を解決する簡単な方法はありますか?

29
Jeeyoung Kim

Pom-only(<packaging>pom</packaging>)必要なコンパイラー設定(およびその他のデフォルト設定)を持つプロジェクト。他のプロジェクトと同様に扱います(リリース、Mavenリポジトリへのデプロイなど)。

Pomファイルの先頭にparent宣言を置きます。

<parent>
  <groupId><!-- parent's group id --></groupId>
  <artifactId><!-- parent's artifact id --></artifactId>
  <version><!-- parent's version --></version>
</parent>

設定したいのがコンパイラの設定だけの場合はあまり役に立ちません。ただし、プロジェクト全体で同じように多くのプラグイン、レポート、依存関係を構成している場合は、1つの親を作成してそれらすべてをルール化できます。

ところで、親pomファイルでdependenciespluginsを宣言する場合は注意してください。通常、dependencyManagementpluginManagementを優先する必要があります。詳細は thedocumentation を参照してください。

16
leedm777

このプラグインと設定を~/.m2/settings.xmlで指定すると、すべてのプロジェクトに適用されます。

ただし、これにはプロジェクトの移植性がなくなるという欠点があります。同じpom.xmlで同じコードをビルドしようとすると、settings.xmlの値が同じでない他のマシンでは失敗します。

8
matt b

私はコピー&ペーストにうんざりしています

はい、これを回避し、親POMでmaven-compiler-pluginを構成するには、POM inheritance を使用する必要があります。

別のオプションは @ matt によって提案されたソリューションを使用することです(そして彼はsettings.xmlの使用の長所と短所を詳しく調べました)。

どちらの場合も、これは通常、 maven-enforcer-plugin とその-を使用して確認したい設定です requireJavaVersion このように構成するルール:

<project>
  [...]
  <build>
   <plugins>
     <plugin>
        <groupId>org.Apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-versions</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireJavaVersion>
                  <version>1.6</version>
                </requireJavaVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

しかし、それはより多くを行うことができます(Mavenバージョンのチェックなど)。非常に便利。

5
Pascal Thivent

私のすべてのmavenパッケージをjdk 1.6でコンパイルできるようにしたい

これがマルチモジュールプロジェクトの場合、これらの設定をpluginManagementの下の最上位のPOMに配置するだけです。

多くの独立したプロジェクトがある場合は、この設定をコピーして貼り付けてください。これをグローバルに設定するような「スマートな」ソリューションに注意してください。いつか、1つまたは2つのプロジェクトに異なるコンパイラ設定を使用する必要があり、悪夢が始まります:-)

覚えて...

物事は可能な限り単純にしてください。ただし、単純ではありません

3
kopper