2016-09-10 2 views
1

내가 SRC/해제/자원 SRC/메인/자원을 덮어 전쟁 작업을 만들 :Gradle이 강제로 사용자 정의 WAR 작업의 리소스 파일을 덮어 쓰게합니까?

task warRelease(type: War) { 
    webInf { 
     from 'src/release/resources' 
     into 'classes' 
    } 
    duplicatesStrategy = DuplicatesStrategy.WARN 
} 

예기치 않은 전쟁 파일 this에 따르면

$ jar tf build/libs/project.war | grep database 
WEB-INF/classes/database.properties 
WEB-INF/classes/database.properties 

두 database.properties가,

Gradle 0.9.1에서 복사 작업은 항상 파일을 덮어 씁니다. 다른 전략은 아직 지원되지 않습니다. 사람이 생각하는 것처럼 콘솔 (중복 재)

Gradle을가

Gradle 2.14.1 
------------------------------------------------------------ 

Build time: 2016-07-18 06:38:37 UTC 
Revision:  d9e2113d9fb05a5caabba61798bdb8dfdca83719 

Groovy:  2.4.4 
Ant:   Apache Ant(TM) version 1.9.6 compiled on June 29 2015 
JVM:   1.8.0_102 (Oracle Corporation 25.102-b14) 
OS:   Linux 4.7.2-1-ARCH amd64 

답변

1

전쟁 작업 만 AbstractCopy 작업을 확장합니다. 이 링크는 CopyTask에 대해 직접적으로 이야기하고 있습니다. 일반적으로 setDuplicatesStrategy API를 사용하여 중복 된 파일을 제외하는 작업을 만듭니다. 트릭은 보조 파일이 항상 제외되며, WAR 작업을 위해이 파일을 덮어 쓸 수 없다는 것입니다.

src/main/resources 파일은 기본적으로 WAR 작업에 항상 포함됩니다. 나는 기본 포함의 순서를 변경하는 방법을 찾지 못했습니다. 제외 된 파일의 경로 build/resources/main/에서 오는 이유

task warRelease(type: War) { 
    classifier 'release' 
    webInf { 
     from 'src/main/release' 
     into 'classes/' 
    } 
    rootSpec.filesMatching(/database.properties/) { details -> 
     if (details.file.path =~ "build/resources/main/"){ 
     details.exclude() 
     } 
    } 
} 

당신은 궁금 할 : 다음 최선의 선택은 직접 WAR에서 교체 된 파일을 제외하는 것입니다. 이는 processResources 작업이 WAR에 포함되기 전에 모든 sourceSets 리소스 파일을이 위치에 복사하기 때문입니다.

+0

'src/main'이 아닌 'src/release'를 제외합니다. –

+0

업데이트 된 답변보기, 감사합니다. – cmcginty

0

당신이 참으로 WARN 메시지를 작성 않습니다 지정된 build.gradle 파일을 -v.

src/main/resources/database.properties 이상 src/release/resources/database.properties을 선호하는 WAR 파일에 대한 위해,이 사항을 고려하십시오

apply plugin: 'war' 

task warRelease(type: War) { 
    webInf { 
     exclude 'src/main/resources/database.properties' 
     from 'src/release/resources' 
     into 'classes' 
    } 
} 
+0

'src/release/resources'에서 파일을 제외 할 경우 아무 것도 배제하지 않습니다. –

관련 문제