2014-09-01 9 views
11

È possibile all'interno di Maven impostare una proprietà di sistema raggiungibile da una classe java.Impostazione di una variabile di sistema all'interno di un profilo utente

Ho visto che questo è possibile (here) all'interno del plugin surefire come segue;

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

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

Tuttavia vorrei ottenere una maniglia sull'ambiente sto lavorando in, sto già passando pungolo o dev come argomento di profilo Maven - è possibile in qualche modo di ottenere una maniglia nel codice su questo sia dall'impostazione di una variabile nel profilo, chiamo e poi chiamo system.getProperty o in un altro modo?

Grazie

mio file 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> 

risposta

13

Si dovrebbe verificare la exec-maven-plugin

con la seguente configurazione (notare il <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> 

..e la seguente classe ...

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

..aand l'esecuzione di un package (notare la fase nella configurazione - si può cambiare se si vuole, forse per l'installazione) esso stampa il valore Hello Stack Overflow! dalla chiave hello.world. Quindi in pratica il plugin esegue il tuo programma quando costruisci.

Vedere anche exec:exec goal. Nell'esempio ho usato l'obiettivo exec:java, ma i due sono diversi nel modo in cui funzionano.


UPDATE

Attualmente sto installando alcuni valori delle proprietà in base al profilo nel mio file Maven pom. È possibile impostare questa proprietà di sistema nel profilo? perché davvero, ho solo un file pom per dev e prod e il suo all'interno del profilo avrei bisogno di impostarlo.

Sì, utilizzare semplicemente ${property.name} nell'elemento <value> dell'elemento di proprietà di sistema. Per esempio

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

E il plugin <systemProperties>

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

Solo cambiando il profilo, a uno o stackworld, il messaggio viene stampato rispettivamente Hello Stack Overflow o Hello World,.


UPDATE 2

un altro plugin è la properties-maven-plugin.Nulla è stato fatto su di esso in un attimo, ma da alcuni test la funzionalità necessaria è lì.

Ha un obiettivo set-system-properties insieme a qualche altra useful goals per aiutare le proprietà di andamento gestione

<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

quindi vorrei usare il plugin Maven exec al contrario di quello che attualmente uso essendo Maven-compiler-plugin? – Biscuit128

+0

No, possono andare insieme. Il plugin exec è solo responsabile dell'avvio del programma. Il plugin del compilatore non lo fa. –

+0

un'ultima domanda se è ok? Attualmente sto impostando alcuni valori nelle proprietà in base al profilo nel mio file maven pom. È possibile impostare questa proprietà di sistema nel profilo? perché davvero, ho solo un file pom per dev e prod e il suo all'interno del profilo avrei bisogno di impostarlo. Pubblicherò il mio pom ora – Biscuit128

Problemi correlati