2016-11-14 1 views
1

서버에 JAR을 자동으로 설치하는 Maven 플러그인을 개발 중입니다. 첫 번째 단계는 컴파일 된 JAR 파일을 찾아 서버로 옮기는 것이지만 JAR 파일은 어떻게 찾습니까?Maven 플러그인의 주요 이슈 경로를 찾으십시오.

내 첫 번째 시도했다 :

public class MyMojo extends AbstractMojo { 
    @Override 
    public void execute() throws MojoExecutionException, MojoFailureException { 
     String workingPath = System.getProperty("user.dir"); 
     File targetDir = new File(workingPath + File.separatorChar + "target"); 

     for (File f : targetDir.listFiles()) { 
      if (f.isFile() && f.getName().endsWith(".jar") { 
       System.out.println("Found jar " + f.getName()); 
      } 
     } 
    } 
} 

하지만 고정 된 디렉토리 "대상"을 사용하지 않습니다. 항아리가 어디에 만들어 지는지 알 수있는 방법이 있습니까?

답변

2

예, 간단한 이를 수행하는 방법은 현재 빌드중인 MavenProject을 삽입하고 getArtifact()에 의해 반환 된 이슈에 해당하는 파일을 검색하는 것입니다. 이 작업은 프로젝트 포장 (jar,등) 또는 이슈가 실제로 생성 된 곳에서 작동합니다.

@Mojo(name = "foo") 
public class MyMojo extends AbstractMojo { 

    @Parameter(defaultValue = "${project}", readonly = true, required = true) 
    private MavenProject project; 

    @Override 
    public void execute() throws MojoExecutionException, MojoFailureException { 
     // this is the main artifact file 
     File file = project.getArtifact().getFile(); 
     getLog().info(file.toString()); 
    } 

} 

이 목표는 "foo"이라는 목표를 선언합니다. 값 ${project}이 주입되고, 이는 PluginParameterExpressionEvaluator에 의해 현재 Maven 프로젝트에 대해 평가됩니다. MavenProject에 대한

귀하의 Maven 플러그인합니다 (@Parameter@Mojo 주석에 대한) maven-plugin-annotations에 종속가 필요합니다, 그리고에 maven-core : 물론

<dependency> 
    <groupId>org.apache.maven</groupId> 
    <artifactId>maven-core</artifactId> 
    <version>3.3.9</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.maven.plugin-tools</groupId> 
    <artifactId>maven-plugin-annotations</artifactId> 
    <version>3.5</version> 
    <scope>provided</scope> 
</dependency> 

,이 프로젝트에 대한 이슈라고 요구 플러그인은 실제로 package 단계 이후에 실행되어야한다는 것을 의미합니다. 그렇지 않으면 이슈에 대한 파일이 없습니다.

+0

고마워, 그게 내가 원하는거야. 그리고 당신의 의견에서 말했듯이, outputDirectory가 다르게 정의 될 수 있기 때문에 고정 된 디렉토리를 사용하고 싶지 않았습니다. –

1

당신은 기본 플러그인의 매개 변수의 값, 뭔가 등 아카이브의 경로를 구축하기 위해 predefined variablesproject.build.directory, project.build.finalNameproject.packaging의 값을 사용할 수 있습니다

public class MyMojo extends AbstractMojo { 

    /** 
    * @parameter default-value="${project.build.directory}/${project.build.finalName}.${project.packaging}" 
    */ 
    private String archivePath; 

    public void execute() throws MojoExecutionException { 
     File archive = new File(archivePath); 
     ... 
    } 
} 
+0

이것은 해결책의 일부일뿐입니다. 이슈의 최종 이름과 그 패키지는 여전히 검색되어야합니다. – Tunaki

+0

그리고 실제로 모든 경우에 작동하지는 않습니다. 사용자가 사용자 정의 ['outputDirectory'] (http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html#outputDirectory)를 빌드 디렉토리와 다른 JAR 플러그인에 추가하십시오. – Tunaki

+1

마지막으로, 플러그인 매개 변수에 대한 Javadoc 주석은 이전 Maven 2 방법과 동일합니다. 자바 애노테이션은 Maven 3 (이상)에서 선호된다. – Tunaki

관련 문제