2012-07-16 31 views
54

¿Cómo accedo a las propiedades maven definidas en el pom en un proyecto maven normal y en un proyecto maven plugin?Propiedades de acceso maven definidas en el pom

+1

Qué tipo de información está interesado? Si solo se trata de versiones o cosas similares, entonces probablemente sea una mejor idea [ponerlo en el manifiesto y leerlo desde allí] (http://stackoverflow.com/questions/2712970/how-to-get-maven-artifact- version-at-runtime/2713013 # 2713013). –

+0

Hay una gran cantidad de publicaciones en Stack Overflow sobre esto: http://stackoverflow.com/search?q=read+pom+in+java, al menos, eche un vistazo antes de la publicación. SO edit helpers debería mostrarlos. Google también. –

+0

Gracias chicos. Ahora me doy cuenta de que esto es realmente una mala práctica. Voy a probar otro enfoque. –

Respuesta

0

Puede analizar el archivo pom con JDOM (http://www.jdom.org/).

6

Maven ya tiene una solución para hacer lo que quiera:

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

por cierto: el primer éxito en la búsqueda de 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

Las respuestas de enlace único no se recomiendan aquí (sobre todo porque pueden volverse inútiles cuando el recurso vinculado desaparece). Al menos debe resumir la información del enlace para publicar aquí. –

+0

He publicado accidentalmente el enlace incorrecto, es una publicación de stackoverflow, que no debería desaparecer;) – SWoeste

+0

Pero estoy de acuerdo con usted, solo un enlace es un poco desagradable. Entonces, basado en la fuente del enlace, agregué algunos comentarios y la llamada al método que está buscando (última línea). – SWoeste

15

Establecer un System variable from Maven y en uso de Java following call

System.getProperty("Key"); 
+0

enlace roto, ¿Puedes repararlo? –

+0

Se corrigió el enlace roto. – Santosh

+5

Esto solo funcionará si está ejecutando la compilación resultante de Maven, quizás usando maven-exec-plugin. Si solo está utilizando Maven para compilar el código, esto no funcionará. –

46

Uso del properties-maven-plugin para escribir pom específico properties en un archivo en tiempo de compilación, y luego leer ese archivo en tiempo de ejecución.

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

Y luego, en .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

Eso funcionó, pero hizo que Eclipse cayera en ** ciclo infinito de compilación/implementación a Tomcat ** (compilación -> generar propiedades my.properties -> recursos modificados -> compilación), así que tuve que cambiar la fase a 'compilar'. Sin embargo, no estoy seguro de si es una solución adecuada. –

+0

@atoregozh sugirió usar los recursos de Guava en su lugar para cargar el archivo de propiedades. DE ACUERDO. Pero cambio revertido para mantener este ejemplo mínimo con API estándar. –

Cuestiones relacionadas