現在、小さな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ファイルで。
この問題を解決する簡単な方法はありますか?
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ファイルでdependencies
とplugins
を宣言する場合は注意してください。通常、dependencyManagement
とpluginManagement
を優先する必要があります。詳細は thedocumentation を参照してください。
このプラグインと設定を~/.m2/settings.xml
で指定すると、すべてのプロジェクトに適用されます。
ただし、これにはプロジェクトの移植性がなくなるという欠点があります。同じpom.xmlで同じコードをビルドしようとすると、settings.xml
の値が同じでない他のマシンでは失敗します。
私はコピー&ペーストにうんざりしています
はい、これを回避し、親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バージョンのチェックなど)。非常に便利。
私のすべてのmavenパッケージをjdk 1.6でコンパイルできるようにしたい
これがマルチモジュールプロジェクトの場合、これらの設定をpluginManagement
の下の最上位のPOMに配置するだけです。
多くの独立したプロジェクトがある場合は、この設定をコピーして貼り付けてください。これをグローバルに設定するような「スマートな」ソリューションに注意してください。いつか、1つまたは2つのプロジェクトに異なるコンパイラ設定を使用する必要があり、悪夢が始まります:-)
覚えて...
物事は可能な限り単純にしてください。ただし、単純ではありません。