사용자 도구

사이트 도구


gradle:web

Gradle Web(War) Plugin

apply plugin: 'war'
  • 웹 애플리케이션 리소스 기본 디렉토리 : src/main/webapp
  • webAppDirName 값을 프로젝트에 상대적인 디렉토리로 지정하면 웹 애플리케이션 리소스의 디렉토리를 변경할 수 있다.
  • jetty 참조

태스크

  • War war 태스크가 하나 추가된다. compile 태스크에 의존한다.
  • War Plugin은 Java Plugin의 assemble 태스크가 war 태스크에 의존하도록 변경한다.

프로젝트 레이아웃

  • src/main/webapp : 웹 애플리케이션 소스. webAppDirName 값으로 조정

의존성 관리

  • War Plugin은 두가지 의존성을 추가한다. 아래는 compile, runtime configuration과 동일한 스코프이지만, WAR 압축파일에는 추가되지 않는다.
    • providedCompile
    • providedRuntime
  • providedXXX는 이행성 설정이다. 어떤 라이브러리가 provided로 설정되면 그것이 의존하는 다른 라이브러리도 자동으로 provided가 된다. 강제로 compile 로 지정해도 상관없다.
  • 이행성을 없애려면 의존성 지정시 commons-httpclient:commons-httpclient:3.0@jar 처럼 끝에 @jar를 붙인다.
// 기본 Servlet API
dependencies {
    providedCompile 'javax.servlet:servlet-api:2.5'
}

특정 라이브러리가 servlet-api를 compile 스코프로 이미 가지고 있는 상황에서는, 해당 라이브러리 의존성에서 exclude를 해준다.

dependencies {
    compile('some:library:1.0') {
        exclude group: 'javax.servlet', module: 'servlet-api'
    }
    providedCompile 'javax.servlet:servlet-api:2.5'
}

Convention Properties

프라퍼티이름 타입 기본값 설명
webAppDirName String src/main/webapp 웹 애플리케이션 소스 디렉토리의 이름. 프로젝트 디렉토리에 상대경로
webAppDir File projectDir/webAppDirName 웹 애플리케이션 소스 디렉토리

war 태스크

  • War war 태스크는 src/main/webapp의 컨텐츠를 war 파일의 루트로 복사한다. webapp 디렉토리는 WEB-INF를 포함하고 있어야 한다. WEB-INFweb.xml을 포함해야 한다.
  • 컴파일된 클래스는 WEB-INF/classes로 복사된다.
  • 모든 runtime 의존성 라이브러리들을 WEB-INF/lib로 복사된다.
  • war 파일명에서 version 빼기
    war {
        archiveName = "${baseName}.${extension}" // projectName.war
    }

압축 풀린 war

  • war 태스크는 기본적으로 압축한 *.war파일을 생성한다. 압축 안한 웹 애플리케이션이 필요하다면,
    task explodedWar(type: Copy) {
        description = 'Generate exploded war'
        group = 'build'
        dependsOn war.dependsOn
     
        into "${buildDir}/exploded"
        with war
    }
    • 이 방식은 war가 의존성이 걸린 것이 있을 때 무시해 버린다. 따라서 war에 걸린 의존성을 explodedWar에도 걸어줘야 한다.
  • 혹은 war 마지막에 압축을 풀도록 설정도 가능
    war.doLast {
      ant.unzip(src: war.archivePath, dest: "${buildDir}/exploded")
    }

War 커스터마이징

configurations {
   moreLibs
}
 
repositories {
   flatDir { dirs "lib" }
   mavenCentral()
}
 
dependencies {
    compile module(":compile:1.0") {
        dependency ":compile-transitive-1.0@jar"
        dependency ":providedCompile-transitive:1.0@jar"
    }
    providedCompile "javax.servlet:servlet-api:2.5"
    providedCompile module(":providedCompile:1.0") {
        dependency ":providedCompile-transitive:1.0@jar"
    }
    runtime ":runtime:1.0"
    providedRuntime ":providedRuntime:1.0@jar"
    testCompile "junit:junit:4.8.2"
    moreLibs ":otherLib:1.0"
}
 
war {
    from 'src/rootContent' // 웹 애플리케이션 루트에 지정된 경로 이하의 파일 셋 추가, into에 웹 애플리케이션 루트에 상대적인 경로로 복사될 목표 디렉토리 지정 가능.
    webInf { from 'src/additionalWebInf' } // WEB-INF에 지정된 파일셋 추가, into에 WEB-INF에 상대적인 경로로 복사될 목표 디렉토리 지정 가능.
    classpath fileTree('additionalLibs') // WEB-INF/lib 에 지정된 파일셋 추가
    classpath configurations.moreLibs // WEB-INF/lib 에 지정된 구성 추가
    webXml = file('src/someWeb.xml') // WEB-INF/web.xml 로 복사
}

참조

gradle/web.txt · 마지막으로 수정됨: 2014/10/02 10:10 저자 kwon37xi