2017-04-21 5 views
2

내 Maven 플러그인에서 Maven 빌드 타임 스탬프에 액세스하려고합니다. 따라서 특수 변수 maven.build.timestamp을 사용하려고합니다.

maven.build.timestamp 빌드 시작을 나타내는 타임 스탬프입니다. Parameter#defaultValue와 메이븐 2.1.0-M1

이후 :

파라미터 기본값 결국 분사시에 해석 될 ${...} 식 함유 : PluginParameterExpressionEvaluator 참조.

그러나 항상 값은 null입니다. 나는 Date 타입과 String 타입으로 시도했다.

자바 코드 :

@Mojo(name = "test", defaultPhase = LifecyclePhase.GENERATE_SOURCES) 
public class TestMojo extends AbstractMojo { 

    @Parameter(defaultValue = "${maven.build.timestamp}", readonly = true) 
    private Date timestampDate; 

    @Parameter(defaultValue = "${maven.build.timestamp}", readonly = true) 
    private String timestampString; 

    @Override 
    public void execute() throws MojoExecutionException, MojoFailureException { 
     getLog().error("timestampDate: " + timestampDate); 
     getLog().error("timestampString: " + timestampString); 
    } 
} 

플러그인 구성 :

<plugin> 
    <groupId>com.mycompany</groupId> 
    <artifactId>test-maven-plugin</artifactId> 
    <version>0.0.12</version> 
</plugin> 

로그 :

[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building test 0.0.1 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- test-maven-plugin:0.0.12:test (default-cli) @ test    --- 
[ERROR] timestampDate: null 
[ERROR] timestampString: null 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.799 s 
[INFO] Finished at: 2017-04-21T14:37:20+02:00 
[INFO] Final Memory: 8M/223M 
[INFO] ------------------------------------------------------------------------ 

환경 : 8

    • 자바 왜 내 사용자 지정 메이븐 플러그인에 특별한 변수가 해결되지

    메이븐 3.3.3 임베디드?

  • 답변

    1

    두 가지 대안을 찾았습니다.

    @Mojo(name = "test", defaultPhase = LifecyclePhase.GENERATE_SOURCES) 
    public class TestMojo extends AbstractMojo { 
    
        @Parameter 
        private String timestamp; 
    
        @Override 
        public void execute() throws MojoExecutionException, MojoFailureException { 
         getLog().error("timestamp: " + timestamp); 
        } 
    } 
    

    구성 플러그인 :

    <plugin> 
        <groupId>com.mycompany</groupId> 
        <artifactId>test-maven-plugin</artifactId> 
        <version>0.0.12</version> 
        <configuration> 
         <timestampString>${maven.build.timestamp}</timestampString> 
        </configuration> 
    </plugin> 
    

    플러그인 구성

    자바 코드에서

    • maven.build.timestamp 단점 :

      구성의 보일러 플레이트 코드.기본 값으로

    • session.request.startTime

      자바 코드 :

      @Mojo(name = "test", defaultPhase = LifecyclePhase.GENERATE_SOURCES) 
      public class TestMojo extends AbstractMojo { 
      
          @Parameter(defaultValue = "${session.request.startTime}", readonly = true) 
          private Date timestamp; 
      
          @Override 
          public void execute() throws MojoExecutionException, MojoFailureException { 
           getLog().error("timestamp: " + timestamp); 
          } 
      } 
      

      플러그인 구성 :

      <plugin> 
          <groupId>com.mycompany</groupId> 
          <artifactId>test-maven-plugin</artifactId> 
          <version>0.0.12</version> 
      </plugin> 
      

      단점 :

      확실치 않습니다. session.request.startTime의 값은 항상 maven.build.timestamp과 같습니다. maven.build.timestamp.format으로 정의 된 형식은 자동으로 사용되지 않습니다.