2017-03-28 6 views
2

Git 태그를 통해 Gradle에서 Java 프로젝트 용 자동 버전 관리를 구현하고 싶습니다. 현재 git describe 명령을 사용하여 버전 문자열을 생성하고 있습니다. 버전 문자열은 매니페스트 파일에서 사용되어야하며 프로그래밍 방식으로 검색 할 수 있어야합니다. 그래서 빌드에 포함되어 Java 코드로 읽을 수있는 속성 파일에 메서드를 저장하는 방법을 구현했습니다. 이처럼 내 빌드 scrips에있는 내가 그것을 사용Gradle에서 Git 기반 자동 버전 관리

apply plugin: 'java' 
apply plugin: VersioningPlugin 

class VersioningPlugin implements Plugin<Project> { 

    private Project project; 

    private String getVersion() { 
     def stdout = new ByteArrayOutputStream() 
     project.exec { 
      commandLine 'git', 'describe', '--tags' 
      standardOutput = stdout 
     } 
     stdout.toString().trim() 
    } 

    @Override 
    void apply(Project project) { 
     this.project = project 

     project.extensions.create('versioning', VersioningPluginExtension) 

     project.versioning.version = getVersion() 

     project.task('writeVersionFile') { 
      doLast { 
       def versionPropsFile = project.versioning.versionFile 
       def versionProps = new Properties() 
       versionProps.put('version', getVersion()) 
       versionProps.store(versionPropsFile.newWriter(), null) 
      } 
     } 
    } 
} 

class VersioningPluginExtension { 
    File versionFile 
    String version 
} 

compileJava.dependsOn writeVersionFile 

:

apply from: 'versioning.gradle' 
versioning { 
    versionFile = file('my/ressource/folder/version.properties') 
} 
println(versioning.version) 

모든 확인을 작동 내가 현재 가지고있는

이 작은 Gradle을 플러그인 (내가 Gradle을 정말 새로운 해요)입니다 . 내가 가지고있는 유일한 문제는 다음과 같습니다. 나는 코드를 작성하고 테스트하기 위해 gradle을 사용하고 코드를 커밋하고 git 태그를 만듭니다. 이제 gradle이 먼저 정리하지 않고 jar 파일을 패키징하도록 요청하면 파일이 변경되었음을 알지 못했기 때문에 새 version.properties를 jar 파일에 복사하지 않습니다. 그래서 내 응용 프로그램은 이전 버전을 보여줍니다.

내가 할 수있는 일이 있습니까? 어떻게하면 gradle을 사용하여 버전 변경을 알 수 있고 현재 version.properties 파일로 병을 만들 수 있습니까? 당신이해야 할 일은

+0

플러그인이'project.version' 속성을 업데이트하거나 작성 될 때 jar 이름을 변경해야하는 것처럼 보입니다. – cjstehno

+0

내 대답을 보셨나요? 문제가 해결 되었습니까? – Opal

답변

0

는 뭔가가 변경된 경우 인식 할 수있는 명시 적으로 clean를 호출하지 않고 실행할 수 있도록 Jar 작업의 TaskOutputs (또는 from)을 구성하는 것입니다. 이것은 다음과 같은 방법으로 수행 할 수 있습니다

jar { 
    from versioning.versionFile 
} 

둘째. 비슷한 방법으로 writeVersionFile을 구성 할 수 있습니다. 입력과 출력을 모두 구성하면 작업은 캐시 가능이됩니다. 변경된 방법은 here이며, 데모는 here입니다.

또한 작업이 지금 afterEvaluate 폐쇄로 작성되었습니다. 왜 그런가요? 이것은 versioning {} 이후이므로 확장이 실행되고 versionFile 속성이 설정되고 출력으로 구성 될 수 있습니다.

jar 입력을 versioning.gradle 파일로 구성 할 수도 있습니다.

+0

은 매력처럼 작동합니다. :) 감사합니다! –