헤르메스 LIFE

[Gradle] build.gradle 설정방법 본문

Build

[Gradle] build.gradle 설정방법

헤르메스의날개 2014. 3. 8. 08:03
728x90

* Plugin

/**
 * plugin 설정 : JAVA, WAR(JAVA-WEB)
 * 
 * java plugin을 설정하는 경우 프로젝트의 기본 디렉토리 구조는 다음과 같다.
 * src/main/java : 실제 서비스를 담당하는 자바 소스 코드를 관리하는 디렉토리.
 * src/test/java : 테스트 소스를 관리하기 위한 디렉토리. 
 *                 메이븐 빌드 툴은 서비스 소스 코드와 테스트 소스 코드를 분리해서 관리하며,
 *                 배포 시 테스트 소스 코드가 같이 배포되지 않게 한다.
 * src/main/resources : 서비스에 사용되는 자원을 관리하는 디렉토리.
 * src/test/resources : 테스트 시에 필요한 자원을 관리하기 위한 디렉토리.
 *
 * war plugin
 * 프로젝트에서 war plugin을 사용하려면 build.gradle 파일에 다음과 같이 설정하면 된다.
 * war plugin은 java plugin과 의존관계에 있다. 따라서 빌드 스크립트에 war plugin을 추가하면 java plugin은 별도로 추가하지 않아도 된다.
 *
 * eclipse-wtp plugin
 * 웹프로젝트는 eclipse-wtp 플러그인으로 분리되었다.
 * 따라서, WTP 프로젝트를 생성하려면 eclipse-wtp 플러그인도 적용해야 한다.
 * eclipse-wtp를 적용하면 eclipse 플러그인은 명시하지 않아도 자동 적용된다.
 *
 * 웹프로젝트는 eclipse-wtp 플러그인으로 분리되었다.
 * 따라서, WTP 프로젝트를 생성하려면 eclipse-wtp 플러그인도 적용해야 한다.
 * eclipse-wtp를 적용하면 eclipse 플러그인은 명시하지 않아도 자동 적용된다.
 */
apply plugin: "java"
apply plugin: "war"
apply plugin: "eclipse"
apply plugin: "eclipse-wtp"


* 기본 설정

// JAVA Version 1.6
sourceCompatibility = 1.6
// 개발한 애플리케이션 버전
version = '1.0'

// logback(slf4j)를 사용하기 때문에 모든 의존성에서 commons-logging는 제외
// commons-logging-xxx.jar 파일을 Maven에서 내려받지 않기 때문에 runtime 시 오류가 난다.
[configurations.runtime, configurations.default]*.exclude( module: 'commons-logging' )

// JAVA 컴파일시 인코딩 설정
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'


* 프로젝트 초기화

// 프로젝트 초기화
// 1. java source directory 생성 : src/main/java, src/test/java
// 2. resource directory 생성    : src/main/resource, src/test/resource
// 3. web source directory 생성  : src/main/webapp, src/main/webapp/WEB-INF
// .settings 폴더의 org.eclipse.wst.common.component 파일을 설정한다.
task initProject(description: 'initialize project') << {
    createDir = {
        println "create source directory: $it"
        if (!it.exists()) it.mkdirs()
    }
    sourceSets *.java. srcDirs*.each createDir
    sourceSets *.resources. srcDirs*.each createDir
    [webAppDir, new File(webAppDir, '/WEB-INF' ), new File(webAppDir, '/WEB-INF/spring' ), new File(webAppDir, '/WEB-INF/views'), new File(webAppDir, '/META-INF' )].each createDir
}


* webAppDir 변경

// war plug과 함께.. Web Root 폴더지정.
// .settings 폴더의 org.eclipse.wst.common.component 파일을 설정한다.
// 배포를 생각하지 않고 직접 프로젝트를 관리할 경우 사용한다. ( 사실 이럴 경우 의미가 없는 듯 하다. )
project.webAppDirName = 'WebContent'   // Default 값은 src/main/webapp 임.



 이렇게 변경됨. ( Default는 webapp 임.)

추가로


/**
 * 의존성 설정
 * Maven을 이용하여 Jar 파일을 내려받는다.
 */
repositories {
    flatDir { dirs "WebContent/WEB-INF/lib" }
    mavenCentral()
    maven { url "http://repo.spring.io/libs-release" }
}

dependencies {
  compile fileTree(dir: "WebContent/WEB-INF/lib", include: '*.jar')
}


* Eclipse 설정 수정

.settings 폴더의 org.eclipse.wst.common.component 파일을 직접 수정함.
.classpath 파일을 직접 수정함.

/**
 * Eclipse 환경설정.
 */
eclipse {
    classpath {
        downloadSources = true
        defaultOutputDir = file("WebContent/WEB-INF/classes" )  // 컴파일 후 class 파일이 저장되는 폴더.
      
        // src/test/java, src/test/resources의 output 디렉토리를 지정한다.
        file {
            whenMerged { cp ->
                cp.entries.findAll{ entry ->
                    entry.kind == 'src' && entry.path.startsWith( "src/test/")
                }*.output = "build/test-classes"
            }
        }
    }
    // workspace/{project}/.settings 폴더를 설정한다.
    wtp {
        // .settings 폴더의 org.eclipse.wst.common.component 파일을 설정한다.
        component {
            //contextPath = project.name // 원하는 contextPath 지정. 단, 빈 컨텍스트패스는 "/" 로 지정
            contextPath = "" // 원하는 contextPath 지정. 단, 빈 컨텍스트패스는 "/" 로 지정
        }
        // .settings 폴더의 org.eclipse.wst.common.project.facet.core.xml 파일을 설정한다.
        facet {
            facet name: "jst.web" , version: "2.5" // Servlet Spec Version 지정
            facet name: "jst.java" , version: "1.6" // Java Version 지정, 1.7 ...
            facet name: 'wst.jsdt.web' , version: '1.0'   // Javascript 지정, 1.0
        }
    }
}


 Properties for Proejct > Proejct Facets


 classes 폴더가 생성됨.

※ 추가 설정.
// 아래 구문을 사용하면 Web App Library 설정이 이상하게 풀려버림.
// 확인하고 사용해야 함.
eclipse.classpath.file {
    // Classpath entry for Eclipse which changes the order of classpathentries; otherwise no sources for 3rd party jars are shown
    withXml { xml ->
        def node = xml.asNode()
        node.remove( node.find { it.@path == 'org.eclipse.jst.j2ee.internal.web.container' } )
        node.appendNode( 'classpathentry' , [ kind: 'con', path: 'org.eclipse.jst.j2ee.internal.web.container' , exported: 'true'])
    }
}


* 외부 jar 추가


// 의존성 설정에 사용할 프로퍼티
ext {
    encoding      = "UTF-8"
    javaVersion   = '1.7'
    encoding      = 'UTF-8'
    versions = [
        spring : '3.1.1.RELEASE',
        aspectj : '1.7.3',
        slf4j : '1.7.5',
        cglib : '2.2.2',
        jackson : '1.9.13',
        hibernate : '4.2.3.Final',
        projectlombok : '0.12.0'
    ]
}

repositories {
    flatDir { dirs "WebContent/WEB-INF/lib" }
    mavenCentral()
    maven { url "http://repo.spring.io/libs-release" }
}


def lib = [
    // Servlet 버젼에 따라 Dependency 경로가 다름.
    //providedCompile "javax.servlet:javax.servlet-api:3.0.1"
    'servlet' : [
        "javax.servlet:servlet-api:2.5" ,
        "javax.servlet.jsp:jsp-api:2.1"
    ],
    'spring' : [
          "org.springframework:spring-context:${versions.spring}" ,
          "org.springframework:spring-context-support:${versions.spring}" ,
          "org.springframework:spring-webmvc:${versions.spring}" ,
          "org.springframework:spring-orm:${versions.spring}" ,
          //'org.springframework.data:spring-data-jpa:1.3.4.RELEASE'
    ],
    'aop' : [
          "org.aspectj:aspectjrt:${versions.aspectj}" ,
          "org.aspectj:aspectjweaver:${versions.aspectj}" ,
          "cglib:cglib:${versions.cglib}" ,
          "cglib:cglib-nodep:${versions.cglib}"
    ],
    'hirbernate' : [
          "org.hibernate:hibernate-entitymanager:${versions.hibernate}" ,
          "org.hibernate:hibernate-envers:${versions.hibernate}" ,
          'org.hibernate:hibernate-validator:5.0.1.Final'
    ],
    'hirbernate-related' : [
          'joda-time:joda-time:2.2' ,
          'joda-time:joda-time-hibernate:1.3' ,
          'com.google.guava:guava:14.0.1'
    ],
    'etc' : [
          //"javax.inject:javax.inject:1",
          //"org.codehaus.jackson:jackson-mapper-asl:${versions.jackson}",
          "commons-logging:commons-logging:1.1.1" ,
          "commons-codec:commons-codec:1.8" ,
          "commons-dbcp:commons-dbcp:1.4" ,
          "mysql:mysql-connector-java:5.1.26" ,
          "javax.servlet:jstl:1.2" ,
          "org.projectlombok:lombok:${versions.projectlombok}"
    ],
    'test' : [
          "org.springframework:spring-test:${versions.spring}" ,
          "junit:junit:4.+" ,
          "org.mockito:mockito-core:1.9.0"
    ]
  
]

/**
 * 의존성 설정
 * Maven을 이용하여 Jar 파일을 내려받는다.
 */
dependencies {
    providedCompile lib.servlet
 
    compile lib.spring, lib.aop, lib.etc
}


* war 파일 생성

war {
    exclude 'WEB-INF/lib/**'
    exclude 'WEB-INF/classes/**'

    // copy properties file in classes so that
    // they may be loaded from classpath
    from('resources')    {
        include '*.properties'
        into 'WEB-INF/classes/'
    }

    //webInf { from 'src/additionalWebInf' } // adds a file-set to the WEB-INF dir.
    //classpath fileTree('additionalLibs') // adds a file-set to the WEB-INF/lib dir.
    //webXml = file('src/main/webapp/WEB-INF/web.xml') // copies a file to WEB-INF/web.xml
}










728x90

'Build' 카테고리의 다른 글

[Maven] 수동으로 jar파일 다운받는 방법은?  (0) 2020.11.12
[Maven] 최신버젼 실행 시 오류  (0) 2020.11.12
[Gradle] Gradle task 실행  (0) 2014.03.08
[Gradle] 개발환경 설정  (0) 2014.03.08
[Gradle] Gradle의 소개  (0) 2014.03.08