gradle eclipse-wtp插件添加wb-resource会从部署中删除webAppDir

时间:2014-04-09 09:07:56

标签: eclipse gradle eclipse-wtp gradle-eclipse

使用带有gradle插件的Spring Tool Suite 3.5,gradle 1.11

我想实现这一点:从命令行运行gradle build和从Eclipse部署到Tomcat时,将项目依赖库的内容提取到WAR文件中。

我有这样的build.gradle项目:

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'

webAppDirName =  'WebContent'

configurations{
    common
}

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

war{
    from ({zipTree(configurations.common.singleFile)}){
        into('common')
    }
}   

dependencies {
    common "group:artifact:version:common@jar"
}

Eclipse不会按configurations.common部分中的规定提取war{},所以 我不得不稍微更改脚本:

eclipse{
        wtp{
            facet{
                ...
            }
            component{
                resource sourcePath: "build/common", deployPath: "/common"
            }
        }
}

task extractCommon(type:Copy){
    from {
        configurations.common.collect{ zipTree(it) }
    }
    exclude 'META-INF/**'
    into "$buildDir/common"
}

eclipseClasspath.dependsOn(extractCommon)

这样在重新创建eclipse项目文件和设置之前就会提取dependend JAR,但遗憾的是 webAppDirName 部署程序集设置中消失了日食项目。

另一个解决方法:

eclipse{
        wtp{
            facet{
                ...
            }
            component{
                resource sourcePath: "build/common", deployPath: "/common"
                resource sourcePath: "$webAppDirName", deployPath: "/"
            }
        }
}

这样日食就像预期的那样,但它看起来很麻烦,我觉得我错过了一些东西,并且 eclipse-wtp 插件应该以某种方式自动执行此操作。

是否有更简单的方法来实现:

  1. Eclipse从Eclipse部署时遵循 war{} 块中定义的规定行为(在创建Web之前提取一些JAR) 应用程序)。
  2. 以增量方式定义resources,而不从部署中清除webAppDirName文件夹
  3. 修改 让我重新解释一下这个问题:

    如果我有一个具有典型目录结构的 war 项目

    src
     main
      java
      webapp
    generated_source
    

    和build.gradle一样:

    apply plugin:'java'
    apply plugin:'war'
    apply plugin:'eclipse-wtp'
    
    eclipse.wtp.component.resource(sourcePath:'generated_source', deployPath:'/WEB-INF')
    

    然后运行gradle cleanEclipse eclipseWtpComponent生成的文件 - .settings/org.eclipse.wst.common.component

    应该是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
    <project-modules id="moduleCoreId" project-version="2.0">
        <wb-module deploy-name="gradleissue">
            <property name="context-root" value="gradleissue"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
            <wb-resource deploy-path="/" source-path="src/main/webapp"/>
            <wb-resource deploy-path="/WEB-INF/" source-path="generated_source"/>
        </wb-module>
    </project-modules>
    

    但它看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <project-modules id="moduleCoreId" project-version="2.0">
        <wb-module deploy-name="gradleissue">
            <property name="context-root" value="gradleissue"/>
            <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
            <wb-resource deploy-path="/WEB-INF/" source-path="generated_source"/>
        </wb-module>
    </project-modules>
    

    /src/main/webapp文件夹从部署程序集中消失。我有一种不好的感觉,这不是它应该做的。 我还检查了https://github.com/gradle/gradle/blob/master/subprojects/ide/src/test/groovy/org/gradle/plugins/ide/eclipse/EclipseWtpPluginTest.groovy中的测试,看起来这个案例不见了(我不是一个时髦的人)。

1 个答案:

答案 0 :(得分:0)

您是否添加了&#34; generated_source&#34;目录到你的源集?我有类似的项目设置,但我以不同的方式组织我生成的源目录:

src/main
  java
  generatedJava
  webapp

然后,您只需将generatedJava目录添加到源集:

sourceSets.main.java {
        // added additional source folder for generated classes
        srcDir "${rootDir}/src/main/generatedJava"
}

这导致了预期的eclipse wtp配置:

<?xml version="1.0" encoding="UTF-8"?>
<project-modules id="moduleCoreId" project-version="2.0">
    <wb-module deploy-name="myproject">
        <property name="context-root" value="myproject"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/resources"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="src/main/generatedJava"/>
        <wb-resource deploy-path="/" source-path="src/main/webapp"/>
    </wb-module>
</project-modules>

您可以在github上找到一个有效的示例构建:https://github.com/jereh16/gradle-example-build