목차

Gradle Eclipse Plugin

apply plugin: 'eclipse'
 
// 혹은
apply plugin: 'eclipse-wtp'

Eclipse용 Gradle Plugin

Eclipse용 Gradle 플러그인을 원한다면

Multiple Project Import

WTP 사용시 중요!

현재 (1.2) WTP 프로젝트가 의존하고 있는 일반 Java 프로젝트에도 eclipse-wtp를 apply하지 않으면 의존 라이브러리를 제대로 배포(Deployment Assembly)에 추가하지 못하는 문제가 있다. /GRADLE-1880 참조.

따라서 eclipse-wtp를 사용하려면 의존관계가 엮이는 모든 프로젝트에 apply plugin: “eclipse-wtp”를 해줘야 한다.

태스크

태스크이름 의존성 타입 설명
eclipse eclipse* Task 모든 Eclipse 설정 파일을 생성한다.
cleanEclipse cleanEclipse* Delete 모든 Eclipse 설정을 삭제한다.

설정

모델 레퍼런스 이름 설명
EclipseModel eclipse Eclipse 플러그인의 최상의 요소
EclipseProject eclipse.project project 정보를 구성한다.
EclipseClasspath eclipse.classpath classpath 정보를 구성한다.
EclipseJdt eclipse.jdt jdt 정보(source/target의 자바 호환성)를 구성한다.
EclipseWtpComponent eclipse.wtp.component eclipse-wtp 플러그인 적용시, wtp 컴포넌트 정보를 구성한다.
EclipseWtpFacet eclipse.wtp.facet eclipse-wtp 플러그인 적용시, wtp facet 정보를 구성한다.

소스 디렉토리 추가

sourceSetsjavaresourcessrcDir로 소스 디렉토리를 추가하면 이클립스에서도 자동으로 소스 디렉토리로 만든다.

sourceSets {
    main {
        resources {
            srcDir "src/main/resources-appcontext" // resources-appcontext가 소스 디렉토리로 추가됨
        }
    }
}

Default Output Dir

eclipse {
    classpath {
        defaultOutputDir = file("${buildDir}/classes/main")
    }
}

테스트 소스 Output Dir 변경

eclipse.classpath.file.whenMerged { cp ->
	def testSrcs = cp.entries.findAll {
		it instanceof org.gradle.plugins.ide.eclipse.model.SourceFolder &&
		 it.path.startsWith("src/test/")
	 }
 
	 testSrcs.each {
                // 멀티 프로젝트에서는 꼭 project.relativePath 로 호출해야 한다.
                // 안그러면 Root 프로젝트에 대한 상대경로가 지정됨면서 하위 모듈의 프로젝트이름이 이중으로 들어감.
	 	it.output = project.relativePath("${buildDir}/classes/test")
	 	it.exported = false // Deployment Assembly에서 제외
	 }
         // 중복 엔트리 삭제. gradle eclipse를 두 번이상 실행하면 test 관련 디렉토리가 중복 생성된다.
         cp.entries.unique()
}

소스와 Java API Doc 함께 다운로드

eclipse {
  classpath {
    //default settings for downloading sources and Javadoc:
    downloadSources = true
    downloadJavadoc = false
  }
}

WTP

eclipse {
    wtp {
        component {
            contextPath = project.name // 원하는 contextPath 지정. 단, 빈 컨텍스트패스는 '/' 로 지정
        }
        facet {
            facet name: 'jst.web', version: '2.5' // Servlet Spec Version 지정
            facet name: 'jst.java', version: '1.6' // Java Version 지정, 1.7 ...
        }
    }
}

LinkedResources

eclipse {
  project {
    linkedResource name: '프로젝트에상대적인경로', type: '1|2, locationUri: 'file://someUri' // URI 기반
    linkedResource name: '프로젝트에상대적인경로', type: '1|2', location: '/some/location' // 파일의 절대 경로 기반.
  }
}

생성된 설정파일 커스터마이징

Eclipse 플러그인은 이클립스 설정 메타 데이터 파일을 생성하면서 커스터마이징 할 수 있도록 지원해준다.

병합

이미 존재하는 이클립스 설정 파일의 부분들은 어떤 부분이냐에 따라 수정 혹은 덮어쓰기의 대상이다. 나머지 부분은 있는 그대로 내버려 둔다.

무조건 덮어쓰기

이클립스 설정 파일을 항상 완전히 덮어 쓰려면 gradle cleanEclipse eclipse를 한다. 간단히 tasks.eclipse.dependsOn(cleanEclipse)로 지정해 놓고 gradle eclipse를 실행해도 된다.

특정 파일별로 덮어 쓰기를 하려면 gradle cleanEclipseClasspath eclipseClasspath 형태로 각 부분을 명시해 주면 된다.

파일 생성 라이프사이클 후킹

이클립스 플러그인은 Gradle이 생성하는 이클립스 파일의 모델링을 하는 객체를 제공해 준다. 파일 생성 라이프사이클은 다음과 같다.

  1. 설정 파일을 읽는다, 존재하지 않으면 Gradle이 생성하는 기본 버전을 사용한다.
  2. beforeMerged 훅이 설정 파일을 나타내는 도메인 객체를 인자로 실행된다.
  3. 이미 존재하는 컨텐츠가 Gradle 빌드에서 생성되었거나 eclipse DSL에서 정의한 설정과 병합된다.
  4. whenMerged 훅이 설정 파일을 나타내는 도메인 객체를 인자로 실행된다.
  5. withXml 훅이 저장될 설정 파일의 XML을 인자로 실행된다.
  6. 최종 XML이 저장된다.
모델 beforeMerged { arg → } 인자타입 whenMerged { arg → } 인자타입 withXml { arg → } 인자타입
EclipseProject Project Project XmlProvider
EclipseClasspath Classpath Classpath XmlProvider
EclipseJdt Jdt Jdt
EclipseWtpComponent WtpComponent WtpComponent XmlProvider
EclipseWtpFacet WtpFacet WtpFacet XmlProvider

존재하는 컨텐츠의 일부를 덮어쓰기

beforeMerged 훅을 사용하여 기존에 존재하는 컨텐츠의 특정 부분만 덮어쓸 수 있다. beforeMerged는 말 그대로 기존에 존재하는 데이터에 대해서만 접근할 수 있다. Gradle이 신규 생성하는 것들에는 접근할 수 없다.

그 결과 생성되는 .classpath 파일은 원본 파일에 있는 의존성 엔트리는 모두 제거하고 Gradle이 생성한 것만 가지게 된다. .classpath의 다른 부분은 그대로 남아서 병합된다. .project 파일도 마찬가지로 할 수 있다.

완전히 생성된 도메인 객체 수정하기

whenMerged 훅으로 완전히 생성된 도메인 객체를 관리할 수 있다. 보통 이 방식을 주로 쓴다.

XML 수정하기

withXmlhook을 사용하여 메모리에 있는 XML을 디스크에 쓰기 전에 제어할 수 있다. whenMerged가 좀 더 편하다. 하지만 생성되는 파일에서 모델에 들어가지 않는 부분들에 대한 완전한 제어권을 가질 수 있게 된다.

gradle eclipse 쉽게 실행하기

target/build 디렉토리 derived로 만들기

Gradle + Eclipse Expert 더 정리