2016-02-03 59 views
4

我的問題是有很大關係這一one使用Maven3.1,RepositorySystemSession和RepositorySystem不注入,並保持零

但我無法得到它的工作。希望它的一些更多的目光將有助於

我的環境

Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 08:22:22-0700) 
Maven home: /usr/local/maven 
Java version: 1.8.0_40, vendor: Oracle Corporation 
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "mac os x", version: "10.11.3", arch: "x86_64", family: "mac" 

我在Maven的3.1,所以我使用了新的eclipse.aether,不sonatype.aether。

我的插件

package aether.example; 

import java.util.List; 

import org.apache.maven.plugin.AbstractMojo; 
import org.apache.maven.plugin.MojoExecutionException; 
import org.apache.maven.plugin.MojoFailureException; 
import org.apache.maven.plugins.annotations.Mojo; 
import org.eclipse.aether.RepositorySystem; 
import org.eclipse.aether.RepositorySystemSession; 
import org.eclipse.aether.repository.RemoteRepository; 

@Mojo(name="test") 
public class TestMojo extends AbstractMojo { 


    /** 
    * The entry point to Aether, i.e. the component doing all the work. 
    * 
    * @component 
    */ 
    private RepositorySystem repoSystem; 

    /** 
    * The current repository/network configuration of Maven. 
    * 
    * @parameter default-value="${repositorySystemSession}" 
    * @readonly 
    */ 
    private RepositorySystemSession repoSession; 

    /** 
    * The project's remote repositories to use for the resolution of project dependencies. 
    * 
    * @parameter default-value="${project.remoteProjectRepositories}" 
    * @readonly 
    */ 
    private List<RemoteRepository> projectRepos; 

    /** 
    * The project's remote repositories to use for the resolution of plugins and their dependencies. 
    * 
    * @parameter default-value="${project.remotePluginRepositories}" 
    * @readonly 
    */ 
    private List<RemoteRepository> pluginRepos; 

    @Override 
    public void execute() throws MojoExecutionException, MojoFailureException { 
    System.out.println("TestMojo"); 
    System.out.println("Session: " + repoSession); 
    System.out.println("Repos: " + projectRepos); 
    System.out.println("repoSys: " + repoSystem); 

    } 

} 

我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>aether.example</groupId> 
    <artifactId>my-aether-plugin</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
    <packaging>maven-plugin</packaging> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <mavenVersion>3.1.1</mavenVersion> 
     <aetherVersion>1.1.0</aetherVersion> 
     <mavenPluginVersion>3.2</mavenPluginVersion> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
      </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-plugin-plugin</artifactId> 
       <version>${mavenPluginVersion}</version> 
       <configuration> 
        <goalPrefix>my-aether</goalPrefix> 
        <!-- see http://jira.codehaus.org/browse/MNG-5346 --> 
        <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> 
       </configuration> 
       <executions> 
        <execution> 
         <id>mojo-descriptor</id> 
         <goals> 
          <goal>descriptor</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>help-goal</id> 
         <goals> 
          <goal>helpmojo</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven</groupId> 
      <artifactId>maven-plugin-api</artifactId> 
      <version>${mavenVersion}</version> 
      <scope>provided</scope> 
      <exclusions> 
       <exclusion> 
        <groupId>org.apache.maven</groupId> 
        <artifactId>maven-model</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.apache.maven</groupId> 
        <artifactId>maven-artifact</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>org.eclipse.sisu</groupId> 
        <artifactId>org.eclipse.sisu.plexus</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.aether</groupId> 
      <artifactId>aether-api</artifactId> 
      <version>${aetherVersion}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.aether</groupId> 
      <artifactId>aether-util</artifactId> 
      <version>${aetherVersion}</version> 
     </dependency> 
    <dependency> 
     <groupId>org.apache.maven.plugin-tools</groupId> 
     <artifactId>maven-plugin-annotations</artifactId> 
     <version>3.4</version> 
     <scope>provided</scope> 
    </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</project> 

的方式我安裝它

mvn clean install 

的方式我運行它

mvn aether.example:my-aether-plugin:test 

我的輸出

TestMojo 
Session: null 
Repos: null 
repoSys: null 

這有什麼錯呢?

+0

取代了它你不能得到它的工作。爲什麼不?它會運行嗎?你收到什麼錯誤? – Litty

+0

它編譯並運行上面的輸出。基本上,我的3個變量都沒有被初始化/注入 – kane

回答

5

我想出了我的問題。出於某種原因,註釋部分中的註釋不起作用,即使代碼是直接從文檔中複製的。

而不是

/** 
* The entry point to Aether, i.e. the component doing all the work. 
* 
* @component 
*/ 
private RepositorySystem repoSystem; 

/** 
* The current repository/network configuration of Maven. 
* 
* @parameter default-value="${repositorySystemSession}" 
* @readonly 
*/ 
private RepositorySystemSession repoSession; 

/** 
* The project's remote repositories to use for the resolution of project dependencies. 
* 
* @parameter default-value="${project.remoteProjectRepositories}" 
* @readonly 
*/ 
private List<RemoteRepository> projectRepos; 

@Component 
private RepositorySystem repoSystem; 

/** 
* The current repository/network configuration of Maven. 
*/ 
@Parameter(defaultValue = "${repositorySystemSession}") 
private RepositorySystemSession repoSession; 

/** 
* The project's remote repositories to use for the resolution of project dependencies. 
*/ 
@Parameter(defaultValue = "${project.remoteProjectRepositories}") 
private List<RemoteRepository> projectRepos;