在JVM启动时从.jar中的.properties文件设置属性

des*_*lat 4 java maven-2 jar properties

如何设置JVM以在JVM启动时的类路径中自动加载.jar中的.properties文件?我不想在命令行上配置属性(使用-D),但将它们放在.properties文件中.

有没有办法在Maven的帮助下配置它?

Mic*_*rdt 6

不,不可能自动从文件加载系统属性.您可以做的是使用某种启动器来读取文件并自动将其"转换"为-D命令行选项.

Java WebStart做了类似的事情,在JNLP文件中定义了系统属性- 也许你可以使用它.


Ric*_*ler 5

如果您使用 Maven 打包应用程序,请考虑使用 appassembler-maven-plugin 的generate-daemons目标。这将为 Windows 和 linux 生成基于 JSW 的守护程序包装器。因此,用于启动应用程序的 bat/sh 文件将定义这些属性,同时仍允许您通过命令行指定其他属性。

您可以在执行时指定defaultJVMSettings属性,以便使用这些属性启动 JVM。下面的示例显示了如何定义这些设置:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>appassembler-maven-plugin</artifactId>
  <version>1.0</version>
  <execution>
    <id>generate-jsw-scripts</id>
    <phase>package</phase>
    <goals>
      <goal>generate-daemons</goal>
    </goals>
    <configuration>
      <defaultJvmSettings>
        <initialMemorySize>256M</initialMemorySize>
        <maxMemorySize>1024M</maxMemorySize>
        <systemProperties>
          <systemProperty>java.security.policy=conf/policy.all</systemProperty>
          <systemProperty>com.sun.management.jmxremote</systemProperty>
          <systemProperty>com.sun.management.jmxremote.port=8999</systemProperty>
          <systemProperty>
            com.sun.management.jmxremote.authenticate=false
          </systemProperty>
          <systemProperty>com.sun.management.jmxremote.ssl=false</systemProperty>
        </systemProperties>
        <extraArguments>
          <extraArgument>-server</extraArgument>
        </extraArguments>
      </defaultJvmSettings>
      <daemons>
        <daemon>
          <id>myApp</id>
          <mainClass>name.seller.rich.MainClass</mainClass>
          <commandLineArguments>
            <commandLineArgument>start</commandLineArgument>
          </commandLineArguments>
          <platforms>
            <platform>windows</platform>
            <platform>unix</platform>
          </platforms>
        </daemon>
      </daemons>
      <target>${project.build.directory}/appassembler</target>
    </configuration>
  </execution>
</plugin>
Run Code Online (Sandbox Code Playgroud)