eclipse で Gradle プロジェクトの Spring 環境をつくる(part 2)

こんにちわ、平和な日々を過ごすほげPGです。
今回は、前回Eclipse上で設定したことを build.gradle に記載してEclipseプロジェクトを作成したいと思います。

手順は空のフォルダに以下の build.gradle を作成し、gradle eclipseを実行するだけです。

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
sourceCompatibility = 1.8
targetCompatibility = 1.8
war {
    archiveName 'hoge.war'
    destinationDir file('build')
}
task prepareMyProject << {
    file('src/main/java').mkdirs()
    file('src/main/resources').mkdirs()
    file('src/main/webapp').mkdirs()
}
eclipseClasspath.dependsOn prepareMyProject
task wrapper(type: Wrapper) {
    gradleVersion = '2.14.1'
}
repositories {
    jcenter()
}
dependencies {
    compile 'org.springframework:spring-webmvc:4.3.7.RELEASE'
    compile 'org.slf4j:slf4j-api:1.7.21'
    compile 'org.slf4j:slf4j-log4j12:1.7.21'
    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'
    providedCompile 'javax.servlet:jsp-api:2.0'
    testCompile 'junit:junit:4.12'
}
eclipse {
    project {
        buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
        natures 'org.eclipse.buildship.core.gradleprojectnature'
    }
    classpath {
        defaultOutputDir = file('build/classes')
        file {
            whenMerged { classpath ->
                classpath.entries.removeAll { it.kind == "lib" }
                classpath.entries.removeAll { it.kind == "con" }
            }
            withXml {
                def node = it.asNode()
                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'])
                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.buildship.core.gradleclasspathcontainer', exported: 'true'])
                    .appendNode('attributes')
                    .appendNode('attribute', [name: 'org.eclipse.jst.component.dependency', value: '/WEB-INF/lib'])
            }
        }
    }
    wtp {
        facet {
            facet name: 'jst.web', version: '3.0'
            facet name: 'java', version: '1.8'
        }
        component {
            contextPath  = 'hoge'
            file {
                whenMerged { modules ->
                    modules.wbModuleEntries.removeAll { it instanceof org.gradle.plugins.ide.eclipse.model.WbDependentModule }
                }
            }
        }
    }
}
tasks.eclipse.doFirst {
    File buildship_prefs = file(".settings/org.eclipse.buildship.core.prefs")
    buildship_prefs.append('''
        build.commands=org.eclipse.jdt.core.javabuilder,org.eclipse.wst.common.project.facet.core.builder,org.eclipse.wst.validation.validationbuilder
        connection.arguments=
        connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
        connection.java.home=null
        connection.jvm.arguments=
        connection.project.dir=
        derived.resources=.gradle,build
        eclipse.preferences.version=1
        natures=org.eclipse.jdt.core.javanature,org.eclipse.wst.common.project.facet.core.nature,org.eclipse.wst.common.modulecore.ModuleCoreNature,org.eclipse.jem.workbench.JavaEMFNature
        project.path=\\:
    '''. stripIndent())
}

 

説明:

war {
    archiveName 'hoge.war'
    destinationDir file('build')
}

war生成時の設定です。
archiveName:warファイル名
destinationDir:war出力先フォルダ

task prepareMyProject << {
    file('src/main/java').mkdirs()
    file('src/main/resources').mkdirs()
    file('src/main/webapp').mkdirs()
}
eclipseClasspath.dependsOn prepareMyProject

空フォルダの作成です。

task wrapper(type: Wrapper) {
    gradleVersion = '2.14.1'
}

ラッパー用のタスクです。gradlewを使いたい場合はgradle wrapper を実行してください。

eclipse {
    project {
        buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'
        natures 'org.eclipse.buildship.core.gradleprojectnature'
    }

gradleプロジェクトにする設定です。

    classpath {
        defaultOutputDir = file('build/classes')
        file {
            whenMerged { classpath ->
                classpath.entries.removeAll { it.kind == "lib" }
                classpath.entries.removeAll { it.kind == "con" }
            }
            withXml {
                def node = it.asNode()
                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'])
                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.buildship.core.gradleclasspathcontainer', exported: 'true'])
                    .appendNode('attributes')
                    .appendNode('attribute', [name: 'org.eclipse.jst.component.dependency', value: '/WEB-INF/lib'])
            }
        }
    }

.classpathの設定です。defaultOutputDirは出力先です。
<classpathentry kind=”lib” …> と<classpathentry kind=”con” …>をいったん削除し、必要なxmlタグを追加。

    wtp {
        facet {
            facet name: 'jst.web', version: '3.0'
            facet name: 'java', version: '1.8'
        }

ファセットの設定です。

        component {
            contextPath  = 'hoge'
            file {
                whenMerged { modules ->
                    modules.wbModuleEntries.removeAll { it instanceof org.gradle.plugins.ide.eclipse.model.WbDependentModule }
                }
            }
        }

コンテキストパスの設定と、アセンブリ上の不要な指定の削除です。

tasks.eclipse.doFirst {
    File buildship_prefs = file(".settings/org.eclipse.buildship.core.prefs")
    buildship_prefs.append('''
        build.commands=org.eclipse.jdt.core.javabuilder,org.eclipse.wst.common.project.facet.core.builder,org.eclipse.wst.validation.validationbuilder
        connection.arguments=
        connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
        connection.java.home=null
        connection.jvm.arguments=
        connection.project.dir=
        derived.resources=.gradle,build
        eclipse.preferences.version=1
        natures=org.eclipse.jdt.core.javanature,org.eclipse.wst.common.project.facet.core.nature,org.eclipse.wst.common.modulecore.ModuleCoreNature,org.eclipse.jem.workbench.JavaEMFNature
        project.path=\\:
    '''. stripIndent())
}

org.eclipse.buildship.core.prefsが作成されず、ビルドエラーになってしまったので、ファイルを勝手に作成する設定です。中身は前回作成したプロジェクトのorg.eclipse.buildship.core.prefsの内容そのままです。

今回は以上です。ではでは。

\ 最新情報をチェック /

1 thoughts on “eclipse で Gradle プロジェクトの Spring 環境をつくる(part 2)

この投稿はコメントできません。