You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle Java项目模块间取值返回null,如何解决?

问题原因

你当前的写法存在两个核心问题:

  1. 第一个模块中静态变量c的赋值逻辑放在了它自己的main方法里,但这个main方法只有在直接运行该类时才会执行。第二个模块运行的是自身的org.p.Main入口,完全不会触发第一个模块的main方法,因此c始终是默认的null。
  2. 就算第一个模块的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:27:46