2012-07-16 14 views
54

Come faccio ad accedere alle proprietà Maven definite nel pom in un normale progetto di Maven, e in un progetto di plugin di Maven?di accesso definiti nel pom

+1

Che tipo di informazioni ti interessano? Se sono solo versioni o cose simili, probabilmente è un'idea migliore per [inserirla nel file manifest e leggerla da lì] (http://stackoverflow.com/questions/2712970/how-to-get-maven-artifact- versione-at-runtime/2713013 # 2713013). –

+0

C'è un sacco di post in Stack Overflow su questo: http://stackoverflow.com/search?q=read+pom+in+java, almeno, date un'occhiata prima di postare. COSÌ gli aiutanti di modifica dovrebbero mostrarli. Anche a Google –

+0

Grazie ragazzi. Ora mi rendo conto che questa è una pessima pratica. Proveremo un altro approccio –

risposta

0

È possibile analizzare il file pom con JDOM (http://www.jdom.org/).

6

Maven ha già una soluzione per fare quello che vuoi:

Get MavenProject from just the POM.xml - pom parser?

btw: prima colpito alla ricerca google;)

Model model = null; 
FileReader reader = null; 
MavenXpp3Reader mavenreader = new MavenXpp3Reader(); 

try { 
    reader = new FileReader(pomfile); // <-- pomfile is your pom.xml 
    model = mavenreader.read(reader); 
    model.setPomFile(pomfile); 
}catch(Exception ex){ 
    // do something better here 
    ex.printStackTrace() 
} 

MavenProject project = new MavenProject(model); 
project.getProperties() // <-- thats what you need 
+1

Le risposte single-link sono scoraggiate qui (soprattutto perché possono diventare inutili quando la risorsa collegata a) va via). Dovresti almeno riassumere le informazioni dal link da pubblicare qui. –

+0

Ho accidentalmente postato il link sbagliato, il suo un post StackOverflow, che non dovrebbe andare via;) – SWoeste

+0

Ma sono d'accordo che si briciolo, solo un link è un po 'sgradevole. Quindi, in base alla sorgente del link, ho aggiunto alcuni commenti e la chiamata al metodo che stai cercando (ultima riga). – SWoeste

15

Impostare un System variable from Maven e in uso java following call

System.getProperty("Key"); 
+0

collegamento interrotto, puoi sistemarlo? –

+0

risolto il collegamento interrotto. – Santosh

+5

Funzionerà solo se stai eseguendo la build risultante da Maven, forse usando il plugin maven-exec-plugin. Se stai usando Maven per compilare il codice, questo non funzionerà. –

46

Utilizzare il properties-maven-plugin di scrivere specifica pom properties in un file in fase di compilazione, quindi leggere il file in fase di esecuzione.

Nella tua pom.xml:

<properties> 
    <name>${project.name></name> 
    <version>${project.version}</version> 
    <foo>bar</foo> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0-alpha-2</version> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>write-project-properties</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.outputDirectory}/my.properties</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

E poi nel .java:

java.io.InputStream is = this.getClass().getResourceAsStream("my.properties"); 
java.util.Properties p = new Properties(); 
p.load(is); 
String name = p.getProperty("name"); 
String version = p.getProperty("version"); 
String foo = p.getProperty("foo"); 
+0

Questo ha funzionato, ma ha fatto ricadere Eclipse in ** loop infinito build/deploy-to-Tomcat ** (build -> generate my.properties -> resource changed -> build), quindi ho dovuto cambiare fase in 'compile'. Non sono sicuro se sia la soluzione adeguata però. –

+0

@atoregozh suggerisce di usare Guava Resource per caricare il file delle proprietà. OK. Ma abbiamo ripristinato le modifiche per mantenere questo esempio minimo con le API standard. –

Problemi correlati