【问题标题】:Setting Java properties for `mvn exec:java`为 `mvn exec:java` 设置 Java 属性
【发布时间】:2012-12-25 12:33:37
【问题描述】:

Maven 的 exec:java 目标与 Maven 本身在同一个 JVM 中运行。

我希望能够将一些属性传递给java 二进制文件(特别是-ea -Djava.util.logging.config.file=logging.properties),但如何做到这一点并不明显。

注意:我想将属性传递给 JVM,而不是传递给应用程序的参数。理想情况下,我希望能够在pom.xml 中指定这些,但我意识到这可能由于 Maven 的启动而不太可能。作为一种解决方法,设置所有类路径等的exec:exec 目标就像我调用exec:java 一样会很好。

【问题讨论】:

标签: java maven


【解决方案1】:

来自usage page

    <configuration>
      <mainClass>com.example.Main</mainClass>
      <arguments>
        <argument>argument1</argument>
        ...
      </arguments>
      <systemProperties>
        <systemProperty>
          <key>java.util.logging.config.file</key>
          <value>logging.properties</value>
        </systemProperty>
        ...
      </systemProperties>
    </configuration>

必须在环境变量 MAVEN_OPTS 中设置额外的 JVM 选项

MAVEN_OPTS=-ea 

【讨论】:

  • 谢谢,通过MAVEN_OPTSjava:exec 配置设置日志记录不起作用。这可能与 Java Logger 使用的奇怪启动过程有关。基本上,属性 必须 在 JVM 启动后立即定义。我不知道为什么MAVEN_OPTS 在这种情况下不起作用。
【解决方案2】:

使用命令行:

call mvn exec:java -Dexec.classpathScope="test" -Dexec.mainClass="com.mycompany.MyFirstTest" -DPROPERTY_FILE="MyPropertyFile"

运行你的程序。

有一个管理器类,负责读取属性。

String loggingValue = MyPropertyManager.LOGGING.getPropertyValue();

然后,编写 MyPropertyManager 类以从属性文件中加载属性。

public enum MyPropertyManager {
    LOGGING, OTHERPROPERTY, OTHER;

    public String getPropertyValue() {
        String propertyFile = System.getProperty("PROPERTY_FILE");
        // ... load property file
        Properties loadedProperties = .....
        return properties.get(LOGGING.toString());
    }
}

改进代码,使属性文件只加载一次。

【讨论】:

  • 在 JVM 启动的时候,加载 Java 日志属性已经来不及了。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2012-09-07
  • 2017-11-24
  • 2016-08-05
  • 2017-07-09
  • 1970-01-01
  • 2020-04-10
相关资源
最近更新 更多