Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为“mvn exec:Java”设置Java属性`_Java_Maven - Fatal编程技术网

为“mvn exec:Java”设置Java属性`

为“mvn exec:Java”设置Java属性`,java,maven,Java,Maven,Maven的exec:javatarget与Maven本身在同一个JVM中运行 我希望能够将一些属性传递给java二进制文件(特别是,-ea-Djava.util.logging.config.file=logging.properties),但如何做到这一点并不明显 注意:我想向JVM传递属性,而不是向应用程序传递参数。理想情况下,我希望能够在pom.xml中指定这些,但我意识到这可能不太可能,因为Maven已经启动。作为一种解决方法,设置所有类路径等的exec:exec目标(就像我调用exe

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

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

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

使用命令行:

call mvn exec:java -Dexec.classpathScope="test" -Dexec.mainClass="com.mycompany.MyFirstTest" -DPROPERTY_FILE="MyPropertyFile"
运行你的程序

有一个manager类,负责读取属性

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());
    }
}

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

谢谢,通过
MAVEN_OPTS
设置日志记录或
java:exec
配置不起作用。这可能与Java记录器使用的奇怪启动过程有关。基本上,属性必须在JVM启动后立即定义。我不知道为什么
MAVEN_OPTS
在这种情况下不起作用。在JVM启动时,加载Java日志属性为时已晚。相同,但仅限于CLI解决方案:
String loggingValue = MyPropertyManager.LOGGING.getPropertyValue();
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());
    }
}