のは、私は単純なクラスgradle - "compileJava"は "UP-TO-DATE"のためJavaをコンパイルしていませんか?
public class A {
public int inc(int k, int i){
System.out.println(i);
return 0;
}
}
を持っていると私は、対応するJavaバイトコード(javap -c A.class
)Main
public class Main {
public static void main(String[] args) {
new A().inc(0,7);
}
}
から呼び出してみましょう:
public class A {
public A();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public int inc(int, int);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: iload_2
4: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
7: iconst_0
8: ireturn
}
はiload_2
に注意してください。
不要なパラメータk
を削除しましょう。
public class A {
public int inc(int i){
System.out.println(i);
return 0;
}
}
そしてもちろん今私は、コードを再実行場合
public class Main {
public static void main(String[] args) {
new A().inc(7);
}
}
の
は、Aは私が期待するものであるpublic class A {
public A();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public int inc(int);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: iload_1
4: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
7: iconst_0
8: ireturn
}
にコンパイルされます。 はしかし、それは変わっていません
gradle compileJava
、その後
javap -c A.class
...のは、私は再実行するすべてのものをしたいとバイトコードレベルの変更中だけで興味を持っていないとしましょう。
、実際に
は、Gradleの出力をチェックすると、明らかに存在属さない存在:compileJava UP-TO-DATE
があります。
ここでは、Intellij(2017.2.4)ウィザード(Javaを「追加のライブラリとフレームワーク」として、SDK1.8を使用しているgradleプロジェクト)でプロジェクトを作成し、Main
とA
クラスを追加してテストしましたこの。
この作業を想定どおりに行うためには、何を変更する必要がありますか?
あなたは '.java'ファイルを変更して、gradleはそれが' UP-TO-DATE'だと言っていますか?'upToDateWhen {true}'のような愚かなことや、 'src/main/java'にないファイルでなければ、これはかなりうまくいくでしょう。それとも、マルチプロジェクトビルドで、別のプロジェクトが「UP-TO-DATE」として報告されているのでしょうか? –
@ lance-java私は文字通り私の記事で言及していないことは何もしていない、それは私が混乱している理由です。 – User1291