사용자 도구

사이트 도구


gradle:web

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:web [2012/10/02 20:09]
kwon37xi [의존성 관리]
gradle:web [2014/10/02 10:10] (현재)
kwon37xi
줄 7: 줄 7:
   * 웹 애플리케이션 리소스 기본 디렉토리 : ''src/main/webapp''   * 웹 애플리케이션 리소스 기본 디렉토리 : ''src/main/webapp''
   * ''webAppDirName'' 값을 프로젝트에 상대적인 디렉토리로 지정하면 웹 애플리케이션 리소스의 디렉토리를 변경할 수 있다.   * ''webAppDirName'' 값을 프로젝트에 상대적인 디렉토리로 지정하면 웹 애플리케이션 리소스의 디렉토리를 변경할 수 있다.
 +  * [[gradle:jetty]] 참조
 ===== 태스크 ===== ===== 태스크 =====
   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.bundling.War.html|War]] ''war'' 태스크가 하나 추가된다. ''compile'' 태스크에 의존한다.   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.bundling.War.html|War]] ''war'' 태스크가 하나 추가된다. ''compile'' 태스크에 의존한다.
줄 13: 줄 13:
  
 ===== 프로젝트 레이아웃 ===== ===== 프로젝트 레이아웃 =====
-  * ''src/main/webapp'' : 웹 애플리케이션 소스+  * ''src/main/webapp'' : 웹 애플리케이션 소스. ''webAppDirName'' 값으로 조정
  
 ===== 의존성 관리 ===== ===== 의존성 관리 =====
줄 22: 줄 22:
   * 이행성을 없애려면 의존성 지정시 ''commons-httpclient:commons-httpclient:3.0**@jar**'' 처럼 끝에 ''@jar''를 붙인다.   * 이행성을 없애려면 의존성 지정시 ''commons-httpclient:commons-httpclient:3.0**@jar**'' 처럼 끝에 ''@jar''를 붙인다.
  
 +<code groovy>
 +// 기본 Servlet API
 +dependencies {
 +    providedCompile 'javax.servlet:servlet-api:2.5'
 +}
 +</code>
 +
 +특정 라이브러리가 servlet-api를 compile 스코프로 이미 가지고 있는 상황에서는, 해당 라이브러리 의존성에서 exclude를 해준다.
 +<code groovy>
 +dependencies {
 +    compile('some:library:1.0') {
 +        exclude group: 'javax.servlet', module: 'servlet-api'
 +    }
 +    providedCompile 'javax.servlet:servlet-api:2.5'
 +}
 +</code>
 ===== Convention Properties ===== ===== Convention Properties =====
   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.plugins.WarPluginConvention.html|WarPluginConvention]] 참조.   * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.plugins.WarPluginConvention.html|WarPluginConvention]] 참조.
줄 29: 줄 45:
 |webAppDir | File | //projectDir/////webAppDirName// | 웹 애플리케이션 소스 디렉토리 | |webAppDir | File | //projectDir/////webAppDirName// | 웹 애플리케이션 소스 디렉토리 |
  
-===== Jetty 실행하기 =====+===== war 태스크 ===== 
 +  * [[http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.bundling.War.html|War]] ''war'' 태스크는 //src/main/webapp//의 컨텐츠를 war 파일의 루트로 복사한다. ''webapp'' 디렉토리는 ''WEB-INF''를 포함고 있어야 한다. ''WEB-INF''는 ''web.xml''을 포함해야 한다. 
 +  * 컴파일된 클래스는 ''WEB-INF/classes''로 복사된다. 
 +  * 모든 runtime 의존성 라이브러리들을 ''WEB-INF/lib''로 복사된다. 
 +  * war 파일명에서 version 빼<code groovy> 
 +war { 
 +    archiveName = "${baseName}.${extension}" // projectName.war 
 +
 +</code> 
 +===== 압축 풀린 war ===== 
 +  * war 태스크는 기본적으로 압축한 ''*.war''파일을 생성한다. 압축 안한 웹 애플리케이션이 필요하다면,<code groovy> 
 +task explodedWar(type: Copy) { 
 +    description = 'Generate exploded war' 
 +    group = 'build' 
 +    dependsOn war.dependsOn 
 + 
 +    into "${buildDir}/exploded" 
 +    with war 
 +
 +</code> 
 +    * 이 방식은 war가 의존성이 걸린 것이 있을 때 무시해 버린다. 따라서 **war에 걸린 의존성을 explodedWar에도 걸어줘야 한다**. 
 +  * 혹은 war 마지막에 압축을 풀도록 설정도 가능<code groovy> 
 +war.doLast { 
 +  ant.unzip(src: war.archivePath, dest: "${buildDir}/exploded"
 +
 +</code> 
 + 
 + 
 +===== War 커스터마이징 =====
 <code groovy> <code groovy>
-apply plugin: 'jetty'+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 로 복사 
 +}
 </code> </code>
  
-  ''gradle jettyRun''을 실행하면 war 파일을 생성하고 임베디드 Jetty를 구동한다.+===== 참조 ===== 
 +  [[http://java.dzone.com/articles/gradle-goodness-adding|Gradle Goodness: Adding Dependencies Only for Packaging to War]] 
gradle/web.1349176148.txt.gz · 마지막으로 수정됨: 2012/10/02 20:09 저자 kwon37xi