2014-09-01 14 views
11

Czy jest możliwe, aby ustawić właściwość systemową, która jest możliwa z poziomu klasy java.Ustawianie zmiennej systemowej w profilu profilu

Widziałem, że jest to możliwe (here) wewnątrz wtyczki murfire w następujący sposób;

String param = System.getProperty("my_parameter1"); 

<configuration> 
    <systemPropertyVariables> 
     <my_property1>${my_property1}</my_property1> 
    </systemPropertyVariables> 
</configuration> 

Jednak chciałbym uzyskać uchwyt na środowisko pracuję w, ja już przechodząc prod lub dev jako argument profilu Maven - czy jest to możliwe w jakiś sposób, aby uzyskać uchwyt w kodzie na ten temat albo od ustawienia zmiennej w profilu i wywołanie, a następnie wywołanie system.getProperty lub w inny sposób?

Dzięki

mój plik POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>core</groupId> 
    <artifactId>core</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <build> 
     <sourceDirectory>src</sourceDirectory> 
     <testSourceDirectory>test</testSourceDirectory> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <warSourceDirectory>WebContent</warSourceDirectory> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.17</version> 
       <configuration> 
        <parallel>methods</parallel> 
        <threadCount>10</threadCount> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>sonar-maven-plugin</artifactId> 
       <version>2.1</version> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>src</directory> 
       <excludes> 
        <exclude>**/*.java</exclude> 
       </excludes> 
      </resource> 
      <resource> 
       <directory>resources</directory> 
       <includes> 
        <include>**/*.png</include> 
       </includes> 
      </resource> 
     </resources> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-codec</groupId> 
      <artifactId>commons-codec</artifactId> 
      <version>1.9</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.3.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.3.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.3.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mariadb.jdbc</groupId> 
      <artifactId>mariadb-java-client</artifactId> 
      <version>1.1.7</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>1.9.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.facebook4j</groupId> 
      <artifactId>facebook4j-core</artifactId> 
      <version>[2.0,)</version> 
     </dependency> 
     <dependency> 
      <groupId>com.relayrides</groupId> 
      <artifactId>pushy</artifactId> 
      <version>0.3</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.mail</groupId> 
      <artifactId>javax.mail</artifactId> 
      <version>1.5.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.6.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>javax.mail-api</artifactId> 
      <version>1.5.2</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.activation</groupId> 
      <artifactId>activation</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>com.threewks.thundr</groupId> 
      <artifactId>thundr-mailgun</artifactId> 
      <version>1.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>1.3.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.code.gson</groupId> 
      <artifactId>gson</artifactId> 
      <version>2.3</version> 
     </dependency> 
    </dependencies> 
    <profiles> 
     <profile> 
      <id>DEV</id> 
      <properties> 
       <swifte.url>jdbc:mariadb://ip:3306/swifte?autoReconnect=true</swifte.url> 
       <swifte.username>user</swifte.username> 
       <swifte.password>pass</swifte.password> 
      </properties> 
      <build> 
       <resources> 
        <resource> 
         <directory>resources</directory> 
         <includes> 
          <include>JavaPNSDev.p12</include> 
         </includes> 
        </resource> 
       </resources> 
      </build> 
     </profile> 
     <profile> 
      <id>PROD</id> 
      <properties> 
       <swifte.url>jdbc:mariadb://ip:3306/swifte?autoReconnect=true</swifte.url> 
       <swifte.username>username</swifte.username> 
       <swifte.password>pass</swifte.password> 
      </properties> 
      <build> 
       <resources> 
        <resource> 
         <directory>resources</directory> 
         <includes> 
          <include>JavaPNSProd.p12</include> 
         </includes> 
        </resource> 
       </resources> 
      </build> 
     </profile> 
    </profiles> 
</project> 

Odpowiedz

13

Należy sprawdzeniu exec-maven-plugin

o następującej konfiguracji (zawiadomienie) <systemProperties> ...

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.3.2</version> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>java</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <mainClass>com.example.Main</mainClass> 
     <arguments> 
      <argument>argument1</argument> 
     </arguments> 
     <systemProperties> 
      <systemProperty> 
       <key>hello.world</key> 
       <value>Hello Stack Overflow!</value> 
      </systemProperty> 
     </systemProperties> 
    </configuration> 
</plugin> 

..i następujące klasy ...

package com.example; 
public class Main { 
    public static void main(String[] args) { 
     String prop = System.getProperty("hello.world"); 
     System.out.println(prop); 
    } 
} 

..aand uruchomiona package (zawiadomienie fazę konfiguracji - można zmienić, jeśli chce, może zainstalować) to wypisuje wartość Hello Stack Overflow! z klucz hello.world. Zasadniczo wtyczka uruchamia twój program podczas kompilacji.

Zobacz także exec:exec goal. W przykładzie użyłem celu exec:java, ale oba są różne w sposobie ich działania.


UPDATE

Obecnie jestem ustawienie niektóre wartości w oparciu o właściwości profilu w moim pliku Maven pom. Czy jest możliwe ustawienie tej właściwości systemowej w profilu? ponieważ tak naprawdę, mam tylko jeden plik pom dla dev i prod i jego w profilu powinienem go ustawić.

Tak, po prostu użyj ${property.name} w elemencie <value> elementu właściwości systemu. Na przykład

<profiles> 
    <profile> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <id>world</id> 
     <properties> 
      <hello.world>Hello World!</hello.world> 
     </properties> 
    </profile> 
    <profile> 
     <activation> 
      <activeByDefault>false</activeByDefault> 
     </activation> 
     <id>stack</id> 
     <properties> 
      <hello.world>Hello Stack Overflow</hello.world> 
     </properties> 
    </profile> 
</profiles> 

a plugin <systemProperties>

<systemProperties> 
    <systemProperty> 
     <key>hello.world</key> 
     <value>${hello.world}</value> 
    </systemProperty> 
</systemProperties> 

tylko przez zmianę profilu, albo stack lub world, wiadomość zostanie wydrukowany Hello Stack Overflow lub Hello World odpowiednio.


UPDATE 2

Kolejny plugin jest properties-maven-plugin.Od jakiegoś czasu nic nie zostało zrobione, ale od kilku testów istnieje niezbędna funkcjonalność.

Ma set-system-properties cel wraz z kilkoma innymi useful goals pomóc właściwości uprościć zarządzanie

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>properties-maven-plugin</artifactId> 
    <version>1.0-alpha-2</version> 
    <executions> 
     <execution> 
      <!-- any phase before your app deploys --> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>set-system-properties</goal> 
      </goals> 
      <configuration> 
       <properties> 
        <property> 
         <name>hello.world.two</name> 
         <value>Hello World!</value> 
        </property> 
       </properties> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

więc chciałbym użyć exec maven wtyczki przeciwieństwie do tego, co obecnie używać będąc maven-compiler-plugin? – Biscuit128

+0

Nie mogą iść razem. Wtyczka exec jest odpowiedzialna za uruchomienie programu. Wtyczka kompilatora tego nie robi. –

+0

jedno ostatnie pytanie, czy to dobrze? Obecnie ustawiam niektóre wartości we właściwościach na podstawie profilu w moim pliku pom. Czy jest możliwe ustawienie tej właściwości systemowej w profilu? ponieważ tak naprawdę, mam tylko jeden plik pom dla dev i prod i jego w profilu powinienem go ustawić. Opublikuję mój pom teraz – Biscuit128