{"id":2236,"date":"2017-03-27T17:11:51","date_gmt":"2017-03-27T08:11:51","guid":{"rendered":"http:\/\/www.ois-yokohama.co.jp\/oisblog\/?p=2236"},"modified":"2019-02-12T11:10:03","modified_gmt":"2019-02-12T02:10:03","slug":"eclipse-%e3%81%a7-gradle-%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae-spring-%e7%92%b0%e5%a2%83%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b%ef%bc%88part-2%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/archives\/2236","title":{"rendered":"eclipse \u3067 Gradle \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e Spring \u74b0\u5883\u3092\u3064\u304f\u308b\uff08part 2\uff09"},"content":{"rendered":"<div class=\"veu_autoEyeCatchBox\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"500\" src=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2019\/01\/pic_c076-1024x683.jpg\" class=\"attachment-large size-large wp-post-image\" alt=\"\" srcset=\"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2019\/01\/pic_c076-1024x683.jpg 1024w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2019\/01\/pic_c076-300x200.jpg 300w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2019\/01\/pic_c076-768x512.jpg 768w, https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-content\/uploads\/2019\/01\/pic_c076.jpg 1280w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><\/div>\n<p><span style=\"color: #666666;\">\u3053\u3093\u306b\u3061\u308f\u3001\u5e73\u548c\u306a\u65e5\u3005\u3092\u904e\u3054\u3059\u307b\u3052PG\u3067\u3059\u3002<\/span><br \/>\n\u4eca\u56de\u306f\u3001\u524d\u56deEclipse\u4e0a\u3067\u8a2d\u5b9a\u3057\u305f\u3053\u3068\u3092 build.gradle \u306b\u8a18\u8f09\u3057\u3066Eclipse\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n<p>\u624b\u9806\u306f\u7a7a\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u4ee5\u4e0b\u306e build.gradle \u3092\u4f5c\u6210\u3057\u3001gradle eclipse\u3092\u5b9f\u884c\u3059\u308b\u3060\u3051\u3067\u3059\u3002<\/p>\n<pre class=\"lang:java decode:true\">apply plugin: 'java'\r\napply plugin: 'war'\r\napply plugin: 'eclipse-wtp'\r\nsourceCompatibility = 1.8\r\ntargetCompatibility = 1.8\r\nwar {\r\n    archiveName 'hoge.war'\r\n    destinationDir file('build')\r\n}\r\ntask prepareMyProject &lt;&lt; {\r\n    file('src\/main\/java').mkdirs()\r\n    file('src\/main\/resources').mkdirs()\r\n    file('src\/main\/webapp').mkdirs()\r\n}\r\neclipseClasspath.dependsOn prepareMyProject\r\ntask wrapper(type: Wrapper) {\r\n    gradleVersion = '2.14.1'\r\n}\r\nrepositories {\r\n    jcenter()\r\n}\r\ndependencies {\r\n    compile 'org.springframework:spring-webmvc:4.3.7.RELEASE'\r\n    compile 'org.slf4j:slf4j-api:1.7.21'\r\n    compile 'org.slf4j:slf4j-log4j12:1.7.21'\r\n    providedCompile 'javax.servlet:javax.servlet-api:3.0.1'\r\n    providedCompile 'javax.servlet:jsp-api:2.0'\r\n    testCompile 'junit:junit:4.12'\r\n}\r\neclipse {\r\n    project {\r\n        buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'\r\n        natures 'org.eclipse.buildship.core.gradleprojectnature'\r\n    }\r\n    classpath {\r\n        defaultOutputDir = file('build\/classes')\r\n        file {\r\n            whenMerged { classpath -&gt;\r\n                classpath.entries.removeAll { it.kind == \"lib\" }\r\n                classpath.entries.removeAll { it.kind == \"con\" }\r\n            }\r\n            withXml {\r\n                def node = it.asNode()\r\n                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jdt.launching.JRE_CONTAINER\/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType\/JavaSE-1.8'])\r\n                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.buildship.core.gradleclasspathcontainer', exported: 'true'])\r\n                    .appendNode('attributes')\r\n                    .appendNode('attribute', [name: 'org.eclipse.jst.component.dependency', value: '\/WEB-INF\/lib'])\r\n            }\r\n        }\r\n    }\r\n    wtp {\r\n        facet {\r\n            facet name: 'jst.web', version: '3.0'\r\n            facet name: 'java', version: '1.8'\r\n        }\r\n        component {\r\n            contextPath  = 'hoge'\r\n            file {\r\n                whenMerged { modules -&gt;\r\n                    modules.wbModuleEntries.removeAll { it instanceof org.gradle.plugins.ide.eclipse.model.WbDependentModule }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\ntasks.eclipse.doFirst {\r\n    File buildship_prefs = file(\".settings\/org.eclipse.buildship.core.prefs\")\r\n    buildship_prefs.append('''\r\n        build.commands=org.eclipse.jdt.core.javabuilder,org.eclipse.wst.common.project.facet.core.builder,org.eclipse.wst.validation.validationbuilder\r\n        connection.arguments=\r\n        connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)\r\n        connection.java.home=null\r\n        connection.jvm.arguments=\r\n        connection.project.dir=\r\n        derived.resources=.gradle,build\r\n        eclipse.preferences.version=1\r\n        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\r\n        project.path=\\\\:\r\n    '''. stripIndent())\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<h3>\u8aac\u660e\uff1a<\/h3>\n<pre class=\"lang:java decode:true\">war {\r\n    archiveName 'hoge.war'\r\n    destinationDir file('build')\r\n}\r\n<\/pre>\n<p>war\u751f\u6210\u6642\u306e\u8a2d\u5b9a\u3067\u3059\u3002<br \/>\narchiveName\uff1awar\u30d5\u30a1\u30a4\u30eb\u540d<br \/>\ndestinationDir\uff1awar\u51fa\u529b\u5148\u30d5\u30a9\u30eb\u30c0<\/p>\n<pre class=\"lang:java decode:true\">task prepareMyProject &lt;&lt; {\r\n    file('src\/main\/java').mkdirs()\r\n    file('src\/main\/resources').mkdirs()\r\n    file('src\/main\/webapp').mkdirs()\r\n}\r\neclipseClasspath.dependsOn prepareMyProject\r\n<\/pre>\n<p>\u7a7a\u30d5\u30a9\u30eb\u30c0\u306e\u4f5c\u6210\u3067\u3059\u3002<\/p>\n<pre class=\"lang:java decode:true\">task wrapper(type: Wrapper) {\r\n    gradleVersion = '2.14.1'\r\n}\r\n<\/pre>\n<p>\u30e9\u30c3\u30d1\u30fc\u7528\u306e\u30bf\u30b9\u30af\u3067\u3059\u3002gradlew\u3092\u4f7f\u3044\u305f\u3044\u5834\u5408\u306fgradle wrapper \u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre class=\"lang:java decode:true\">eclipse {\r\n    project {\r\n        buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder'\r\n        natures 'org.eclipse.buildship.core.gradleprojectnature'\r\n    }\r\n<\/pre>\n<p>gradle\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u3059\u308b\u8a2d\u5b9a\u3067\u3059\u3002<\/p>\n<pre class=\"lang:java decode:true\">    classpath {\r\n        defaultOutputDir = file('build\/classes')\r\n        file {\r\n            whenMerged { classpath -&gt;\r\n                classpath.entries.removeAll { it.kind == \"lib\" }\r\n                classpath.entries.removeAll { it.kind == \"con\" }\r\n            }\r\n            withXml {\r\n                def node = it.asNode()\r\n                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.jdt.launching.JRE_CONTAINER\/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType\/JavaSE-1.8'])\r\n                node.appendNode( 'classpathentry', [ kind: 'con', path: 'org.eclipse.buildship.core.gradleclasspathcontainer', exported: 'true'])\r\n                    .appendNode('attributes')\r\n                    .appendNode('attribute', [name: 'org.eclipse.jst.component.dependency', value: '\/WEB-INF\/lib'])\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p>.classpath\u306e\u8a2d\u5b9a\u3067\u3059\u3002defaultOutputDir\u306f\u51fa\u529b\u5148\u3067\u3059\u3002<br \/>\n&lt;classpathentry kind=&#8221;lib&#8221; &#8230;&gt; \u3068&lt;classpathentry kind=&#8221;con&#8221; &#8230;&gt;\u3092\u3044\u3063\u305f\u3093\u524a\u9664\u3057\u3001\u5fc5\u8981\u306axml\u30bf\u30b0\u3092\u8ffd\u52a0\u3002<\/p>\n<pre class=\"lang:java decode:true\">    wtp {\r\n        facet {\r\n            facet name: 'jst.web', version: '3.0'\r\n            facet name: 'java', version: '1.8'\r\n        }\r\n<\/pre>\n<p>\u30d5\u30a1\u30bb\u30c3\u30c8\u306e\u8a2d\u5b9a\u3067\u3059\u3002<\/p>\n<pre class=\"lang:java decode:true \">        component {\r\n            contextPath  = 'hoge'\r\n            file {\r\n                whenMerged { modules -&gt;\r\n                    modules.wbModuleEntries.removeAll { it instanceof org.gradle.plugins.ide.eclipse.model.WbDependentModule }\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<p>\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d1\u30b9\u306e\u8a2d\u5b9a\u3068\u3001\u30a2\u30bb\u30f3\u30d6\u30ea\u4e0a\u306e\u4e0d\u8981\u306a\u6307\u5b9a\u306e\u524a\u9664\u3067\u3059\u3002<\/p>\n<pre class=\"lang:java decode:true\">tasks.eclipse.doFirst {\r\n    File buildship_prefs = file(\".settings\/org.eclipse.buildship.core.prefs\")\r\n    buildship_prefs.append('''\r\n        build.commands=org.eclipse.jdt.core.javabuilder,org.eclipse.wst.common.project.facet.core.builder,org.eclipse.wst.validation.validationbuilder\r\n        connection.arguments=\r\n        connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)\r\n        connection.java.home=null\r\n        connection.jvm.arguments=\r\n        connection.project.dir=\r\n        derived.resources=.gradle,build\r\n        eclipse.preferences.version=1\r\n        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\r\n        project.path=\\\\:\r\n    '''. stripIndent())\r\n}\r\n<\/pre>\n<p>org.eclipse.buildship.core.prefs\u304c\u4f5c\u6210\u3055\u308c\u305a\u3001\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3067\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u52dd\u624b\u306b\u4f5c\u6210\u3059\u308b\u8a2d\u5b9a\u3067\u3059\u3002\u4e2d\u8eab\u306f\u524d\u56de\u4f5c\u6210\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306eorg.eclipse.buildship.core.prefs\u306e\u5185\u5bb9\u305d\u306e\u307e\u307e\u3067\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306f\u4ee5\u4e0a\u3067\u3059\u3002\u3067\u306f\u3067\u306f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3053\u3093\u306b\u3061\u308f\u3001\u5e73\u548c\u306a\u65e5\u3005\u3092\u904e\u3054\u3059\u307b\u3052PG\u3067\u3059\u3002 \u4eca\u56de\u306f\u3001\u524d\u56deEclipse\u4e0a\u3067\u8a2d\u5b9a\u3057\u305f\u3053\u3068\u3092 build.gradle \u306b\u8a18\u8f09\u3057\u3066Eclipse\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002 \u624b\u9806\u306f\u7a7a\u306e\u30d5\u30a9\u30eb\u30c0\u306b\u4ee5\u4e0b\u306e build. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5756,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"vkexunit_cta_each_option":"","footnotes":""},"categories":[6],"tags":[51,52,53],"class_list":["post-2236","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineer","tag-eclipse","tag-gradle","tag-war"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts\/2236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/comments?post=2236"}],"version-history":[{"count":2,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts\/2236\/revisions"}],"predecessor-version":[{"id":5894,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/posts\/2236\/revisions\/5894"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/media\/5756"}],"wp:attachment":[{"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/media?parent=2236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/categories?post=2236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ois-yokohama.co.jp\/oisblog2018\/wp-json\/wp\/v2\/tags?post=2236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}