gpt4 book ai didi

java - gradle - "compileJava"因为 "UP-TO-DATE"而没有编译 Java?

转载 作者:行者123 更新时间:2023-12-03 05:53:20 25 4
gpt4 key购买 nike

假设我有一个简单的类(class)

public class A {
public int inc(int k, int i){
System.out.println(i);
return 0;
}
}

我从 Main 调用它
public class Main {
public static void main(String[] args) {
new A().inc(0,7);
}
}

对应的java字节码( javap -c A.class):
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) 向导创建了项目,(使用 SDK1.8 使用 Java 作为“附加库和框架”的 gradle 项目),添加了 MainA类,并对此进行了测试。

我需要改变什么才能使这项工作按应有的方式工作?

最佳答案

好的,所以这不是 Gradle 的问题,而是 Intelij 的错误配置。

创建项目时,

Gradle 将编译为 .\build\classes ,

但是项目结构->模块中的“模块编译输出路径”设置为.\out\production\classes - Intellij 将从那里获取字节码并运行类。

这也是重新编译 Gradle 不会触及任何文件的地方。

我打开了a different question关于如何处理这个问题,因为这回答了这个问题。

关于java - gradle - "compileJava"因为 "UP-TO-DATE"而没有编译 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com