2017-01-06 5 views
0

マルチモジュール MavenとGradleプロジェクトのソース互換性(つまり、フラグの値がjavacコマンドの場合)を検出するための決定的な方法は何ですか?マルチモジュールMavenおよびGradleプロジェクトでJavaソースレベルを検出する決定的な方法はありますか?

は、ここで私は限られた成功を収めて試してみました何:

  1. mvn help:effective-pomは時々maven-compiler-pluginのために、その出力に<source>1.x</source>行を出力します。
  2. Mavenプロジェクトでは、<maven.compiler.source>プロパティ(例:<maven.compiler.source>1.8</maven.compiler.source>など)がプラグイン設定をオーバーライドするように見えることがあります。 (Go figure)。
  3. Gradleタスクgradle propertiesは、単一モジュールプロジェクトの場合にのみ、sourceCompatibility: 1.xというプロパティを生成します。

は私が必要なものを取得するための信頼できる方法は何ですか、この変動を考えると?私が開発したいツールの目的は、既存のMaven/Gradleプロジェクトを調べ、それらが適切なJavaソースレベルにあるかどうかを確認することです。私が欲しいものをやり遂げるための別の方法があるならば、同様にそれを提案してください。

+0

あなたはすでにあなた自身で答えがあるようです。 *あなたの仕事は、Maven/Gradleの各プロジェクトを調べ、説明した方法を使ってソースレベルを決定し、そのデータを収集することです。 – Andreas

答えて

0

時にはそれが指定されておらず、別のmaven/javaインストールでは異なるjavaバージョンが生成されることがあります。残りの部分は冗長でコンパイルすると助けになるかもしれません。またはより良いジャーの中の.classバージョンバイトを調べてください

最も簡単なのは、バージョンが指定された単一のルートpomを持つことと、他のすべてのモジュールpomをバージョンまたはプロパティーまたはコンパイラプラグインのいずれかでクレンジングすることです。たぶん、ルートpomの依存関係をチェックすることと一緒に。

+0

問題は、私のツールが表示されているプロジェクトのpom.xmlを制御できないことです。このツールは、ソースにどのようなJava言語の互換性があるかを知ることになっています(ポストで明確になっています)。 –

+0

次に、ビルドされたクラスをスキャンします。残りは推測の仕事です。行く価値がありますが、決定的なものではありません。 –

+0

私は同意します。 mavenコンパイラのソースコードをスキャンすると、プラグインの設定が ''について何も言わないときは、バージョンを決定する 'maven.compiler.sourceプロパティ'です。 A [最近のコミット](http://svn.apache.org/viewvc/maven/plugins/tags/maven-compiler-plugin-3.6.0/src/main/java/org/apache/maven/plugin/compiler /AbstractCompilerMojo.java?annotate=1766731#l87)は、デフォルトのバージョンを1.5にアップグレードしました。 –

関連する問題