2012-05-15 6 views
21

Ich arbeite an einem Maven-Plugin. Ich finde es schwierig, herauszufinden, was wäre eine gute Möglichkeit, POM-Informationen aus dem Projekt zu erhalten, in dem Sie den MOJO ausführen?Java Maven MOJO - Informationen aus dem Projekt POM erhalten

Zum Beispiel, wenn ich mein Mojo in einem anderen Maven-Projekt ausführe, möchte ich den Projektnamen oder andere Parameter erhalten.

Und noch etwas, es gibt einen Kontext MAP in der Klasse AbstractMojo.java gibt es private Map pluginContext, könnte jemand mich korrigieren, wenn ich falsch liege, aber das soll für die Weitergabe von Informationen zwischen mojos verwendet werden?

/** 
* @parameter default-value="${project}" 
* @required 
* @readonly 
*/ 
MavenProject project; 

Der Name wird dann einfach durch Aufruf project.getName() verfügbaren Projekte:

+1

Sie sollten klar angeben, was Sie wollen und wo Sie auf diese Informationen zugreifen müssen. Die Projektinformationen stehen standardmäßig im Pom zur Verfügung –

+1

Die erste Frage, die ich immer im Zusammenhang mit der Erstellung von Plugins stelle, lautet: Was möchten Sie erreichen? Bist du sicher, dass du ein Plugin schreiben musst? Sehen Sie sich auch andere Plugins an, zum Beispiel maven-assembly-plugin, maven-javadoc-plugin usw. um zu sehen, wie sie funktionieren etc. – khmarbaise

+0

danke für deine tipps – Xeperis

Antwort

33

Sie können die aktuelle Maven Projekt in Ihr mojo mit einem wie folgt erklärt Feld injizieren. Um diese API zu verwenden, müssen Sie den maven-project Artefakt als Abhängigkeit hinzuzufügen:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0.6</version> 
</dependency> 
+1

Works for me in maven 3.0.3; Fügen Sie die Abhängigkeit hinzu und injizieren Sie das Projekt! –

+0

Ich denke, ich fand diese Antwort an anderer Stelle im Netz, war aber verwirrt durch die Tatsache, dass es durch Hinzufügen einer zuvor unbekannten (zu meinem Projekt) Abhängigkeit injiziert wurde. Das macht es perfekt, danke. –

18
@Component 
private MavenProject project; 

arbeitet auch (kurz und bündig und intuitiv), wenn die neuen maven-plugin-annotations verwenden, das der Standard für neuen Mojos ist erstellt aus maven-archetype-plugin.

EDIT (dank @bmargulies): Obwohl die @Component Javadoc ab 3.2 schlägt vor, es für MavenProject verwenden, offensichtlich, dass ist veraltet und der Vorschlag als 3,3 fallen gelassen wird; die idiom suggested von maven-plugin-tools-annotations (ab 3.3) ist so etwas wie dieses (beide scheinen zu funktionieren):

@Parameter(defaultValue="${project}", readonly=true, required=true) 
private MavenProject project; 
+1

Dies ist veraltet. – bmargulies

+0

OK; Was wird stattdessen empfohlen (für Plugins, die die neue API verwenden)? –

+2

das Annotationsäquivalent von @ Jörn Horstmanns Antwort. – bmargulies

7

Die bevorzugte Syntax ist jetzt:

@Parameter(defaultValue = "${project}", required = true, readonly = true) 
MavenProject project; 

Sie eine Abhängigkeit für maven-project hinzuzufügen haben Ihre Plugins pom:

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-project</artifactId> 
    <version>2.0.6</version> 
</dependency> 

(.. Dank andere, die diese Informationen bereits geliefert haben diese Antwort sie an einem Ort vereint)

+2

Vielleicht möchten Sie für die @Parameter Annotation das maven-plugin-annotations-Artefakt hinzufügen. –

Verwandte Themen