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

时间:2009-09-24 09:23:07

标签: java maven-2 properties jar

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

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

如果您使用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>