2009-09-24 706 views

回答

6

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

的Java Webstart的做类似的东西,随着JNLP file定义系统属性 - 也许你可以使用它。

3

如果您正在使用Maven来打包应用程序,请考虑使用appassembler - Maven的插件的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> 
+0

这是一个独立的应用程序的一个很好的解决方案,但在我的情况下,我有一个库。我想以某种方式将属性与这个lib捆绑在一起,每次使用它时都会设置捆绑的属性。所以基本上我必须在源代码中完成它。 – desolat 2009-09-25 10:19:38

+0

今天我学到了一些新东西。感谢您的回应。 – 2016-08-17 15:56:16