2013-02-12 2 views
0

하나의 프로젝트에서 Maven 저장소에 게시해야하는 여러 개의 jar 파일을 만들려고하는데 이슈 정보가 올바르지 않은 것 같습니다.Gradle의 작업에서 여러 이슈 추가하기

예제에서 나는 sources-jar를 다루는 것을 보아 왔지만 각 병을 만들어야하는 몇 가지 작업을 (동적으로) 만들려고했습니다.

def environments = ['local', 'dev', 'test', 'acc', 'prod'] 

environments.each { e -> 
    task "create${e}jar"(type: Jar, dependsOn: classes) << { 
     def dir = filterPropertiesForEnv(e) 

     from (dir) 
     classifier = e 
    } 

    artifacts.add('archives', tasks["create${e}jar"]) 
} 


File filterPropertiesForEnv(envName) { 
    println "filter for $envName" 
    def destDir = new File(project.buildDir, envName) 

    destDir.mkdir() 

    // Do filter stuff based on each envName 

    destDir 
} 

나는 "설치"작업을 실행

내 동적으로 생성 된 작업이 실행됩니다 "[이름] 항아리를 만들"하지만 어떤 병 파일을 생성하지 않습니다. doLast ("< <")를 제거하면 빌드가 여러 개의 jar 파일을 생성하지만 jar 파일은 다른 모든 것이 실행되기 전에 (구성 단계 중에) 빌드되므로 manifest 파일 만 포함됩니다.

여러 jar를 만들고이를 artifacts로 첨부하는 더 좋은 방법이 있습니까? 이 jar가 포함 된 동일한 패턴을 기반으로 여러 ear 파일을 만들어야하므로 재사용 가능한 솔루션을 찾는 것이 좋습니다. 저는 Maven을 잘 알고 있지만, Gradle은 새로운 지인이며 이런 종류의 문제를 구조화하는 방법을 알지 못했습니다!

+0

그래서 당신이 각 환경에 대해 다른 항아리를 게시 할? 그리고 uploadArchives 작업으로 게시 하시겠습니까? –

답변

1

이 문제에 대한 조사가 끝나면 from-method에 클로저를 추가하면 구성 타임 대신 런타임에 평가가 수행된다는 것을 알았습니다.

실제로 동작하는 솔루션은 다음과 같다 :

def environments = ['local', 'dev', 'test', 'acc', 'prod'] 

environments.each { e -> 
    task "create${e}jar"(type: Jar, dependsOn: classes) << { 

     from { 
      filterPropertiesForEnv(e) 
     } 
     classifier = e 
    } 

    artifacts.add('archives', tasks["create${e}jar"]) 
} 


File filterPropertiesForEnv(envName) { 
    println "filter for $envName" 
    def destDir = new File(project.buildDir, envName) 

    destDir.mkdir() 

    // Do filter stuff based on each envName 

    destDir 
} 
0

그래서 각 환경마다 다른 jar를 게시하고 싶습니까? 그리고 uploadArchives 작업으로 게시 하시겠습니까?

이렇게하는 가장 좋은 방법은 아마도 각 환경에 대한 하위 프로젝트를 만드는 것입니다. 그렇게하면 모든 하위 프로젝트에 대해 업로드 작업을 수행 할 수 있습니다. 게시 한 코드에서 다른 디렉토리의 다른 환경에 대한 코드가 이미있는 것처럼 보입니다.

다른 환경에서 Jar 파일을 만들려고 하나의 큰 코드베이스에서 다른 파일을 필터링하는 미친 일을하는 중이라면 아마 작동하지 않을 것입니다.

+0

레거시 시스템에서 앤트 빌드를 대체하려고하므로 모든 소스를 옮기고 싶지 않습니다. –

+0

리소스는 모든 일반 파일이 저장되는 단일 디렉터리에 저장되며 각 환경에 사용되는 설정은 빌드 중에 부모 폴더에 복사되는 하위 폴더에 저장됩니다. 이 패턴은 약 10 개의 시스템에서 사용되므로 각 시스템에 많은 작업을 복사하지 않고도 재사용 가능한 솔루션이 될 수 있다면 좋을 것입니다! '온더 플라이 (on-the-fly)'병을 게시하는 방법이 있어야합니까? –

관련 문제