2012-08-27 18 views
1

我跟着这个例子中,以获得所需的依赖注入我的AbtractMavenLifecyleParticipant:如何使用奥德在org.apache.maven.AbstractMavenLifecycleParticipant

'afterProjectsRead'被完美调用,但是repoSystem,repoSession和remoteRepos总是'null ”。

如何从AbstractMavenLifecyleParticipant中获取这些对象?

import org.apache.maven.AbstractMavenLifecycleParticipant; 
import org.apache.maven.MavenExecutionException; 
import org.apache.maven.execution.MavenSession; 
import org.codehaus.plexus.component.annotations.Component; 
import org.sonatype.aether.RepositorySystem; 
import org.sonatype.aether.RepositorySystemSession; 
import org.sonatype.aether.repository.RemoteRepository; 

@Component(role = AbstractMavenLifecycleParticipant.class, hint = "skipper") 
public class ModuleSkipperLifecycleParticipant extends AbstractMavenLifecycleParticipant { 

    /** 
    * @component 
    */ 
    private RepositorySystem repoSystem; 

    /** 
    * @parameter default-value="${repositorySystemSession}" 
    * @readonly 
    */ 
    private RepositorySystemSession repoSession; 

    /** 
    * @parameter default-value="${project.remotePluginRepositories}" 
    * @readonly 
    */ 
    private List<RemoteRepository> remoteRepos; 

    @Override 
    public void afterProjectsRead(MavenSession session) throws MavenExecutionException { 
     super.afterProjectsRead(session); 

     System.out.println("repoSession: " + repoSession); 
     System.out.println("repoSystem: " + repoSystem); 
     System.out.println("remoteRepos: " + remoteRepos); 

    } 
} 

回答

1

这是我们如何做到这一点的jcabi-aether

final File repo = this.session.getLocalRepository().getBasedir(); 
final Collection<Artifact> deps = new Aether(this.getProject(), repo).resolve(
    new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"), 
    JavaScopes.RUNTIME 
); 

也许你可以只使用库,而不是自己写的吧..

+0

看起来很棒,第一次测试,似乎工作 - 我会给它更详细的测试。非常感谢现在!!!!! – domi

+0

虽然我不是使用这个图书馆,它给了我正确的提示 - 谢谢! – domi

+0

不客气:) – yegor256