2009-09-24 6 views
4

JVM을 시작할 때 classpath의 .jar 파일에서 .properties 파일을 자동으로로드하도록 JVM을 설정하려면 어떻게해야합니까? 나는 (-D와 함께) 명령 행에서 속성을 설정하고 싶지는 않지만 .properties 파일에 속성을 넣고 싶다.JVM 시작시 .jar의 .properties 파일에서 속성 설정

Maven을 사용하여 구성하는 방법이 있습니까?

답변

6

아니요, 시스템 속성을 파일에서 자동으로로드 할 수 없습니다. 당신이 할 수있는 일은 파일을 읽고 "-D"명령 행 옵션에 자동으로 "번역"하는 일종의 발사기입니다.

Java WebStart는 시스템 속성이 JNLP file에 정의되어 있습니다. 어쩌면 그걸 사용할 수 있습니다.

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> 
+0

독립 실행 형 응용 프로그램을위한 훌륭한 솔루션이지만 내 경우에는 라이브러리가 있습니다. 그리고이 lib와 속성을 묶는 방법으로, 번들 된 속성이 사용될 때마다 번들로 묶고 싶습니다. 그래서 기본적으로 소스 코드에서해야 할 것입니다. – desolat

+0

나는 오늘 새로운 것을 배웠다. 응답 해 주셔서 감사합니다. –