W Stack Overflow jest dużo postów na ten temat: stackoverflow.com/search?q=read+pom+in+java , przynajmniej zajrzyj przed postem. Pomocnicy edycji SO powinni je pokazać. Google też.
Jean-Rémy Revy,
Dzięki chłopaki. Teraz zdaję sobie sprawę, że to naprawdę zła praktyka. Spróbuję innego podejścia.
Użyj wtyczki properties-maven, aby zapisać konkretny propertiesplik pom do pliku w czasie kompilacji, a następnie odczytaj ten plik w czasie wykonywania.
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");
To zadziałało, ale sprawiło, że Eclipse wpadł w nieskończoną pętlę kompilacji / wdrażania na Tomcat (buduj -> generuj moje.properties -> zmieniono zasób -> buduj), więc musiałem zmienićcompile . Nie jestem jednak pewien, czy to właściwe rozwiązanie.
Nikita Bosik
@atoregozh zasugerował użycie zamiast tego zasobów Guava do załadowania pliku właściwości. DOBRZE. Ale cofnięto zmianę, aby ten przykład był minimalny dzięki standardowym interfejsom API.
To zadziała tylko wtedy, gdy uruchomisz wynikową kompilację z Mavena, być może używając wtyczki maven-exec-plugin. Jeśli używasz Mavena do kompilowania kodu, to nie zadziała.
David Pashley,
@DavidPashley, to prawda. W przypadku kompilacji, myślę, że zmienna musi być ustawiona z wtyczki kompilatora.
Santosh
7
Można to zrobić za pomocą standardowych właściwości Java w połączeniu z maven-resource-plugin z włączonym filtrowaniem właściwości.
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
Odradza się tutaj odpowiedzi z jednym linkiem (głównie dlatego, że mogą stać się bezużyteczne, gdy zasób, do którego prowadzi łącze, zniknie). Powinieneś przynajmniej podsumować informacje z linku do postu tutaj.
Joachim Sauer,
2
To naprawdę bardzo zła praktyka, po prostu użyj wtyczki zasobów maven!
Mark Bakker,
1
Dlaczego miałoby to być złą praktyką, jeśli chce uzyskać dostęp do właściwości z kodu Java?
SWoeste,
1
Ale tylko wtedy, gdy zakładasz, że chce / może zmienić swoje pom (y). Zgadzam się z Tobą, że posiadanie właściwości bezpośrednio w pliku pom zamiast w zewnętrznym pliku może być złe. Ten plik można odczytać z klasą właściwości java - jasne. Ale co w drugim przypadku? W takim razie model maven jest najlepszym rozwiązaniem, aby załatwić sprawę ... ale zanim David Dai nie powie nam, czego dokładnie chce, wszyscy tylko zgadujemy.
SWoeste,
1
Zrozumiałem również, że mamy jeden plik mvn pom (zawierający właściwości) i jedną aplikację java (skąd chcemy odczytać szczegóły tego pliku pom). Bez faktycznego biegacza.
Andreas Dolk,
-4
Możesz przeanalizować plik pom za pomocą JDOM (http://www.jdom.org/).
Odpowiedzi:
Użyj wtyczki properties-maven, aby zapisać konkretny
properties
plik pom do pliku w czasie kompilacji, a następnie odczytaj ten plik w czasie wykonywania.W twoim 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>
A następnie w .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");
źródło
compile
. Nie jestem jednak pewien, czy to właściwe rozwiązanie.Skonfiguruj zmienną systemową z Mavena iw java użyj następującego wywołania
System.getProperty("Key");
źródło
Można to zrobić za pomocą standardowych właściwości Java w połączeniu z
maven-resource-plugin
z włączonym filtrowaniem właściwości.Więcej informacji można znaleźć pod adresem http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
Będzie to działać w przypadku standardowych projektów maven, jak w przypadku projektów wtyczek
źródło
Maven ma już rozwiązanie, dzięki któremu możesz robić to, co chcesz:
Pobierz MavenProject z samego POM.xml - pom parser?
btw: pierwsze trafienie w wyszukiwarce 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
źródło
Możesz przeanalizować plik pom za pomocą JDOM (http://www.jdom.org/).
źródło