2014-12-25 11 views
5

İlk Maven eklentimi oluşturmaya çalışıyorum ve bunun için Movos'ta MavenSession'a erişmem gerekiyor. Birçok yerde, aşağıdaki kod parçasının yeterli olması gerektiğini buldum, ancak her zaman mavenSession nesnesini null olarak bitirdim, ancak Maven günlüğünde (eklenti kullanılarak POM.xml) maven oturumu geçtiyse veya En azından nüfuslu - ama MavenSession nesnesine enjekte değildir.MavenSession doldurulamıyor

Lütfen bana neyi kaçırdığımı söyler misiniz?

Teşekkürler!

: günlüğünden

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

Ve bu:


/** 
* The Maven Session 
* 
* @required 
* @readonly 
* @parameter 
* expression="${session}" 
*/ 
private MavenSession mavenSession; 
Ben de (Ben bir yere buldum yorumun temelinde) eklentisi pom.xml için aşağıdaki eklendi
[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

(unit-) test zamanı veya çalışma süresi hakkında mı konuşuyorsunuz? –

+0

@RobertScholte - Sanırım çalışma zamanı dediniz - Bu eklentiyi farklı/ayrı bir Maven projesinden almaya çalışıyorum. –

+0

Bu null' nedir? 'Execute' yönteminizin başlangıcında mı? – mystarrocks

cevap

2

sayesinde Sonunda sorunu buldum. Enjekte edildikten sonra, bu üyelerin Mojo'mın her yerinde erişilebilir ve her yere yayılmış olduğunu varsaydım - ki bu yanlış. Kodumu execute() yöntemine taşıdım ve sorun çözüldü.

Herkese teşekkürler!

1

Eksik Parametre ek açıklaması:

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

Teşekkürler, Hersh - Önerinizi denedim ancak hala (MavenSession) oturumunu boş olarak alıyorum. –

+1

@Hersh, hayır, OP parametre ek açıklamalarını kaçırmadı, bir [javadoc etiketi] kullandı (http://maven.apache.org/plugin-tools/maven-plugin-tools-java/index. html) bunun yerine tavsiye edilmemesine rağmen hala işe yarayacaktır. – mystarrocks

0

Maven'in bileşenlerini enjekte etmek kaputun altında plexus kullanır/maven projesi/bir eklenti projeye pom.xml gelen elemanlar size alakalı bağımlılıkları dahil emin olmalısınız yüzden.

Tüm gerekli bağımlılıkları projenize geçici olarak getirmek için pom.xml'a ekleyebileceğiniz bağımlılıkların tam listesi.

Ve mojo annotations'u mojo javadoc tags'a tercih edin. this'un okunmasıyla ilgili eklenti araçlarının tam bir resmini alabilirsiniz. Eğer iki alan başvurular var gibi

<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

"Maven kullanıyor pluxus kullanıyor" ifadesi Maven 3.0'dan beri artık doğru değil. Ancak eski eklentileri desteklemek için uyum katmanına (sisu) sahiptir (Bkz. Https://jira.codehaus.org/browse/MNG-4749). – khmarbaise

1

görünüyor: Kodunuzda Bu alanı mavenSession diyoruz ama Maven çıkışında bakarken o session ifade eder. ile uygun şekilde enjekte edilmeyen bir soruyu soruyorsunuz gibi görünüyor. Ben yürütmek() yönteminden denilen bir yöntemden mavenSession ve mavenProject erişmeye çalışıyordu

: Burada yanıtlara

+0

Aslında hem oturum hem de mavenSession tanımlandı, bir kez @Parameter ve bir tane JavaDoc etiketi ile enjekte edildi - ama ikisi de boştu. Her neyse - sorun şimdi çözülmüştür (kendi cevabımda eklediğim gibi). –