/ / MavenSession nicht besiedelt - Java, Maven, Maven-Plugin

MavenSession nicht besiedelt - Java, Maven, Maven-Plugin

Ich versuche, mein erstes Maven-Plugin zu erstellen, undDafür muss ich in meinen Mojos auf MavenSession zugreifen. Ich habe an vielen Stellen gefunden, dass das folgende Snippet ausreichen sollte, aber ich ende immer mit dem mavenSession-Objekt als null, obwohl im Maven-Protokoll (der POM.xml mit meinem Plugin) die Maven-Sitzung als bestanden gilt oder zumindest gefüllt - wird jedoch nicht in das MavenSession-Objekt eingefügt.

Kann mir jemand bitte sagen, was mir fehlt?

Vielen Dank!


/**
* The Maven Session
*
* @required
* @readonly
* @parameter
* expression="${session}"
*/
private MavenSession mavenSession;

Ich habe auch die POM.xml des Plugins hinzugefügt (basierend auf einem Kommentar, den ich irgendwo gefunden habe):

<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.2.5</version>
</dependency>

Und das aus dem Protokoll:

[DEBUG] Configuring mojo "com.ofernicus.helpers:resource-helper:1.0-SNAPSHOT:iterate" with basic configurator -->
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@1a785a79
[DEBUG]   (f) mavenProject = MavenProject: com.ofernicus.consumers:resource-helper-consumer:1.0-SNAPSHOT @ C:UsersoferlanworkspacesMavenPluginConsumerresource-helper-consumerpom.xml

Antworten:

2 für die Antwort № 1

Dank der Antworten hier fand ich schließlich das Problem:

Ich habe versucht, auf die mavenSession und das mavenProject von einer Methode aus zuzugreifen namens von der Methode Ausführen (). Ich nahm an, dass diese Mitglieder, sobald sie injiziert wurden, überall im Mojo-Bereich zugänglich und bevölkert sind. Ich habe meinen Code in die Methode execute () selbst verschoben und das Problem wurde behoben.

Danke euch allen!


1 für die Antwort № 2

Annotation für verpasste Parameter:

@Parameter(defaultValue = "${session}")
private MavenSession session;

1 für die Antwort № 3

Sie haben anscheinend Verweise auf zwei Felder: In Ihrem Code rufen Sie dieses Feld auf mavenSession, aber wenn man sich die Ausgabe von Maven ansieht, bezieht es sich auf session. Es sieht so aus, als würden Sie eine Person in Frage stellen, die nicht richtig mit einer Spritze injiziert wird MavenSession.


0 für die Antwort № 4

Maven benutzt plexus unter die Haube, um die Komponenten / Elemente aus dem Maven-Projekt einzuspritzen /pom.xml In ein Plugin-Projekt müssen Sie daher unbedingt die relevanten Abhängigkeiten einbeziehen.

Hier finden Sie eine vollständige Liste der Abhängigkeiten, die Sie Ihrem hinzufügen können pom.xml um alle notwendigen Abhängigkeiten transitiv in Ihr Projekt zu bringen.

Und lieber Mojo-Anmerkungen zu Mojo Javadoc-Tags. Sie erhalten ein vollständiges Bild der verwendeten Plugin-Tools Dies.

<properties>
<pluginTools.version>3.3</pluginTools.version> <!-- be sure to use the latest version in here -->
</properties>

<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-tools-api</artifactId>
<version>${pluginTools.version}</version>
</dependency>

<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>${pluginTools.version}</version>
<scope>provided</scope>
</dependency>