【问题标题】:How to override value specified in build.properties during java execution如何在 java 执行期间覆盖 build.properties 中指定的值
【发布时间】:2016-04-26 19:30:57
【问题描述】:

我在 java 代码使用的 build.properties 文件中设置了属性值。 (这是 UPS Quantum View 的一部分) build.properties file url=https://onlinetools.ups.com/ups.app/xml/QVEvents accesskey=XYZ username=QWER password=12345 subsname=OUTBOUNDFULL

build.properties 在 build.xml 中被引用

<property file="build.properties"/>

我想在不同的时间使用不同的 subsname 值。所以我在尝试

ant -Dsubsname=OUTBOUND_EST 来自命令行,但在构建中它不断从 build.properties 文件中获取值作为 OUTBOUNDFULL。 有没有其他方法可以做到这一点。

(注意:这是 UPS Quantum 视图的一部分) 使用值的部分 java 代码

public class JAXBQVClient {
private static final String LICENSE_NUMBER = "accesskey";
private static final String USER_NAME = "username";
private static final String SUBSNAME = "subsname";
private static final String PASSWORD = "password";
private static final String ENDPOINT_URL="url";
private static final String OUT_FILE_LOCATION = "out_file_location";
static Properties props = null;

static{
    props = new Properties();
    try{
        props.load(new FileInputStream("./build.properties"));
    }catch (Exception e) {
        e.printStackTrace();
    }       
}

【问题讨论】:

  • 在 ant 构建期间或执行 java 代码时,您希望何时覆盖属性值?
  • @P.A.Cros 我想在执行 java 代码时覆盖它。那是它从 build.properties 文件中获取参数(如访问密钥、用户名、密码和子名称)形成请求 xml 的时间。
  • @P.A.Cros - 有没有办法在 java 执行期间覆盖 build.properties 的值。
  • 对不起,我有几天不在办公室...我只是发布一个可以解决您问题的答案(我希望如此...)

标签: java ant ups


【解决方案1】:

由于您的 build.properties 文件由您的 ant 构建启动的 java 进程读取(我猜),您可以使用 filterset ant 概念。

例如,您可以像这样定义属性文件模板build-template.properties

url=https://onlinetools.ups.com/ups.app/xml/QVEvents
accesskey=XYZ
username=QWER
password=12345
subsname=@SUBNAMEKEY@

然后在将其复制到您用于特定运行的build.properties 时使用过滤器集:

<copy file="build-template.properties" toFile="build.properties">
  <filterset>
    <filter token="SUBNAMEKEY" value="${SUBNAMEVALUE}"/>
  </filterset>
</copy>

然后调用ant -DSUBNAMEVALUE=OUTBOUND_EST 应该会生成一个带有subsname=OUTBOUND_ESTbuild.properties 文件

【讨论】:

  • @P.A.Cros。感谢您的回复。我添加了这个:&lt;property file="build.properties" /&gt; &lt;copy file="build-template.properties" toFile="build.properties"&gt; &lt;filterset&gt; &lt;filter token="SUBNAMEKEY" value="${SUBNAMEVALUE}"/&gt; &lt;/filterset&gt; &lt;/copy&gt; 到 build.xml 和 build.properties 和 build-template.properties。但它仍然采用原始 build.properties 中设置的值。根据你的说法,build.xml 有什么变化吗?
  • @Max 在复制并替换模板文件后拨打property file="build.properties" 很重要。任务property file="build.properties" 将加载和设置文件中的任何属性,完成后,每个属性的值都不能再被覆盖
猜你喜欢
  • 1970-01-01
  • 2011-12-16
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多