Verwenden Sie das Eigenschaften-Maven-Plugin , um propertieszur Kompilierungszeit einen bestimmten POM in eine Datei zu schreiben und diese Datei dann zur Laufzeit zu lesen.
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");
Das hat funktioniert, aber Eclipse ist in eine unendliche Build / Deploy-to-Tomcat-Schleife geraten (Build -> Generieren von my.properties -> Ressource geändert -> Build), sodass ich die Phase auf ändern musste compile. Ich bin mir nicht sicher, ob es die richtige Lösung ist.
Nikita Bosik
@atoregozh schlug vor, stattdessen Guava-Ressourcen zum Laden der Eigenschaftendatei zu verwenden. IN ORDNUNG. Die Änderung wurde jedoch rückgängig gemacht, um dieses Beispiel mit Standard-APIs auf ein Minimum zu beschränken.
Leif Gruenwoldt
2
Eine stabile Version 1.0.0 ist ab sofort verfügbar
Dies funktioniert nur, wenn Sie den resultierenden Build von Maven ausführen, möglicherweise mit dem Maven-Exec-Plugin. Wenn Sie nur Maven zum Kompilieren des Codes verwenden, funktioniert dies nicht.
David Pashley
@ DavidPashley, das ist wahr. Im Fall nur der Kompilierung muss die Variable vermutlich über das Compiler-Plugin festgelegt werden.
Santosh
7
Dies kann mit Standard-Java-Eigenschaften in Kombination mit der maven-resource-pluginaktivierten Filterung nach Eigenschaften erfolgen.
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
Von Single-Link-Antworten wird hier abgeraten (hauptsächlich, weil sie unbrauchbar werden können, wenn die verknüpfte Ressource nicht mehr verfügbar ist). Sie sollten zumindest die Informationen aus dem verlinkten Beitrag hier zusammenfassen.
Joachim Sauer
2
Dies ist wirklich eine sehr schlechte Praxis, verwenden Sie einfach das Maven Resource Plugin!
Mark Bakker
1
Warum sollte dies eine schlechte Praxis sein, wenn er über Java-Code auf die Eigenschaften zugreifen möchte?
SWoeste
1
Aber nur wenn Sie davon ausgehen, dass er seine Pom (s) ändern möchte / könnte. Ich stimme Ihnen zu, dass es möglicherweise schlecht ist, die Eigenschaften direkt in der POM-Datei anstelle einer externen Datei zu haben. Diese Datei könnte mit der Java-Eigenschaftenklasse gelesen werden - sicher. Aber was im anderen Fall? Dann ist das Maven-Modell die beste Lösung, um den Trick zu machen ... aber bevor David Dai uns nicht sagt, was genau er tun will, raten wir alle nur.
SWoeste
1
Ich habe auch verstanden, dass wir eine MVN-POM-Datei (mit Eigenschaften) und eine Java-Anwendung (von wo aus wir Details dieser POM-Datei lesen möchten) haben. Ohne tatsächlich Maven laufen zu lassen.
Andreas Dolk
-4
Sie können die POM-Datei mit JDOM (http://www.jdom.org/) analysieren.
Antworten:
Verwenden Sie das Eigenschaften-Maven-Plugin , um
properties
zur Kompilierungszeit einen bestimmten POM in eine Datei zu schreiben und diese Datei dann zur Laufzeit zu lesen.In Ihrer 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.0</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>
Und dann in .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");
quelle
compile
. Ich bin mir nicht sicher, ob es die richtige Lösung ist.Richten Sie eine Systemvariable in Maven ein und verwenden Sie in Java den folgenden Aufruf
System.getProperty("Key");
quelle
Dies kann mit Standard-Java-Eigenschaften in Kombination mit der
maven-resource-plugin
aktivierten Filterung nach Eigenschaften erfolgen.Weitere Informationen finden Sie unter http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
Dies funktioniert für Standard-Maven-Projekte wie für Plugin-Projekte
quelle
Maven hat bereits eine Lösung, um das zu tun, was Sie wollen:
MavenProject nur aus dem POM.xml - Pom Parser herunterladen?
Übrigens: erster Treffer bei der Google-Suche;)
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
quelle
Sie können die POM-Datei mit JDOM (http://www.jdom.org/) analysieren.
quelle