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

运行Jar包时如何为类中重写方法的静态常量传参?

问题描述

我在基于Maven的应用中有如下类:

public class VendorServiceWrapper implements Wrapper{
  
@Override
public String getVendorDetails(String vendorNumber, String vendorType){
  StringBuilder url = new StringBuilder();
  url.append(baseUrl).append(VENDOR_SERVICE_API);
  --
  
}

}

希望在运行Jar包时传入baseUrl和VENDOR_SERVICE_API这两个参数的值,这些变量类似静态常量,一旦传入值就不再修改,请问该如何设置?

解决方案

1. 定义静态不可变变量

在类中将baseUrl和VENDOR_SERVICE_API声明为static final(静态不可变)变量,通过静态代码块读取启动时传入的参数:

public class VendorServiceWrapper implements Wrapper{
    // 静态不可变变量,初始化后无法修改
    private static final String baseUrl;
    private static final String VENDOR_SERVICE_API;

    // 静态代码块读取系统属性,支持设置默认值
    static {
        baseUrl = System.getProperty("app.baseUrl", "http://default-base-url.com");
        VENDOR_SERVICE_API = System.getProperty("app.vendorApi", "/default-vendor-path");
    }
  
    @Override
    public String getVendorDetails(String vendorNumber, String vendorType){
        StringBuilder url = new StringBuilder();
        url.append(baseUrl).append(VENDOR_SERVICE_API);
        // 补充后续业务逻辑
        return url.toString();
    }
}

2. 运行Jar时传入参数

启动Jar包时,通过-D参数传递系统属性,命令示例:

java -jar your-app.jar -Dapp.baseUrl=http://your-real-domain.com -Dapp.vendorApi=/api/vendors

3. 可选:Maven打包配置默认参数

如果需要在打包阶段设置默认启动参数,可以修改pom.xml中的maven-jar-plugin配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>your.package.MainClass</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Arguments>-Dapp.baseUrl=http://default-base-url.com -Dapp.vendorApi=/default-vendor-path</Arguments>
                    </manifestEntries>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

注:打包时配置的默认参数会被启动命令中传入的-D参数覆盖,命令行参数优先级更高。

关键说明

  • static final变量一旦初始化完成就无法修改,完全符合“静态常量”的需求
  • 参数命名建议添加自定义前缀(如app.),避免与系统原生属性冲突
  • 为参数设置默认值可以避免因启动时未传参导致的初始化失败

内容的提问来源于stack exchange,提问作者Ayush Goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:57:05