Gradle Java项目模块间取值返回null,如何解决?
问题原因
你当前的写法存在两个核心问题:
- 第一个模块中静态变量
c的赋值逻辑放在了它自己的main方法里,但这个main方法只有在直接运行该类时才会执行。第二个模块运行的是自身的org.p.Main入口,完全不会触发第一个模块的main方法,因此c始终是默认的null。 - 就算第一个模块的
main方法被执行,里面的while(true)死循环会让程序卡住,根本完成不了赋值后的后续操作。
解决方案
根据你的需求,提供两种可行的修改方式:
方式一:静态初始化(推荐,适合固定值)
直接在静态变量声明时赋值,或者使用静态代码块初始化,这样类加载时就会完成赋值,无需依赖入口方法:
package org.example; public class Main { // 直接初始化静态变量 static String c = "hai"; // 若初始化逻辑复杂,可改用静态代码块 /* static { c = "hai"; // 这里可以添加更多初始化逻辑 } */ public String geta(){ return c; } }
修改后,第二个模块无需改动,调用geta()就能获取到"hai"。
方式二:主动调用初始化方法(适合动态赋值)
如果需要动态设置c的值,不要依赖入口方法,而是提供一个公开的静态初始化方法,让调用方主动触发:
第一个模块修改:
package org.example; public class Main { static String c; // 公开静态初始化方法 public static void initValue() { c = "hai"; // 可根据需求动态修改赋值逻辑 } public String geta(){ return c; } }
第二个模块修改:
package org.p; public class Main { public static void main(String[] args) { // 先调用初始化方法赋值 org.example.Main.initValue(); org.example.Main a = new org.example.Main(); System.out.println(a.geta()); } }
额外注意事项
确保第二个模块在Gradle中已正确依赖第一个模块,在第二个模块的build.gradle中添加依赖配置:
dependencies { implementation project(':你的第一个模块名称') }
内容的提问来源于stack exchange,提问作者pradeep
相关产品推荐
相关产品推荐

