2014-12-25 10 views
5

Sto provando a creare il mio primo plug-in Maven e per questo ho bisogno di accedere a MavenSession nel mio Mojos. Ho trovato in molti posti che il seguente snippet dovrebbe essere sufficiente, ma finisco sempre con l'oggetto mavenSession come null, anche se nel registro Maven (del POM.xml usando il mio plugin) sembra che la sessione di Maven sia passata, o almeno popolato, ma non viene iniettato nell'oggetto MavenSession.MavenSession non popolato

Qualcuno può dirmi per favore cosa mi manca?

Grazie!


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

Ho anche aggiunto quanto segue alla pom.xml del plugin (sulla base di un commento che ho trovato da qualche parte):

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

E questo dal registro:

[DEBUG] Configuring mojo 'com.ofernicus.helpers:resource-helper:1.0-SNAPSHOT:iterate' with basic configurator --> 
[DEBUG] (f) session = [email protected] 
[DEBUG] (f) mavenProject = MavenProject: com.ofernicus.consumers:resource-helper-consumer:1.0-SNAPSHOT @ C:\Users\oferlan\workspaces\Maven\PluginConsumer\resource-helper-consumer\pom.xml 
+0

Stai parlando del tempo di test (unit-) o del tempo di esecuzione? –

+0

@RobertScholte - Immagino che lo chiamereste runtime - Sto provando a chiamare questo plugin da un progetto Maven diverso/separato. –

+0

Dov'è 'null'? All'inizio del tuo metodo 'execute'? – mystarrocks

risposta

2

Grazie alle risposte qui, alla fine ho trovato il problema:

stavo cercando di accedere al mavenSession e mavenProject da un metodo che è stato chiamato dal metodo execute(). Ho pensato che una volta iniettati, questi membri siano accessibili e popolati ovunque nell'ambito del mio Mojo - il che è sbagliato. Ho spostato il mio codice nel metodo execute() stesso e il problema è stato risolto.

Grazie a tutti!

1

annotazione Parametro mancante:

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

Grazie, Hersh - Ho provato il tuo suggerimento ma sto ancora ricevendo (MavenSession) la sessione come null. –

+1

@Hersh, no, l'OP non ha mancato l'annotazione dei parametri, ha usato un [tag javadoc] (http://maven.apache.org/plugin-tools/maven-plugin-tools-java/index. html), che, sebbene non sia raccomandato, funzionerà comunque. – mystarrocks

0

Maven utilizza plexus sotto il cofano per iniettare i componenti/elementi del progetto Maven/pom.xml in un progetto plug-in, quindi è necessario assicurarsi di includere le dipendenze rilevanti.

Ecco un elenco completo delle dipendenze che è possibile includere nel proprio pom.xml per portare tutte le dipendenze necessarie in modo transitorio nel progetto.

E preferire mojo annotations a mojo javadoc tags. È possibile ottenere un'immagine completa degli strumenti del plugin coinvolti nella lettura di this.

<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> 
+2

L'espressione: 'Maven usa pluxus' non è più vera da quando Maven 3.0 ha usato guizzi sotto il cofano. Ma ha il livello di compatibilità (sisu) per supportare i plugin più vecchi (vedi https://jira.codehaus.org/browse/MNG-4749). – khmarbaise

1

Sembra che tu hai i riferimenti a due campi: Nel codice si chiama questo campo mavenSession, ma quando si guarda l'output di Maven si riferisce a session. Sembra che tu stia interrogando uno che non è correttamente iniettato con uno .

+0

In realtà avevo definito sia session che mavenSession, una volta iniettati tramite @Parameter e uno tramite tag JavaDoc - ma entrambi erano nulli. Ad ogni modo - il problema è risolto ora (come ho aggiunto nella mia risposta). –

Problemi correlati