首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle eclipse-wtp插件添加wb-资源移除部署中的webAppDir。

gradle eclipse-wtp插件添加wb-资源移除部署中的webAppDir。
EN

Stack Overflow用户
提问于 2014-04-09 09:07:55
回答 1查看 4.6K关注 0票数 3

使用Spring工具套件3.5与gradle插件,gradle 1.11

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

我的build.gradle项目是这样的:

代码语言:javascript
复制
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{},所以我不得不稍微修改脚本:

代码语言:javascript
复制
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项目文件和设置之前提取依赖JAR,但不幸的是,webAppDirName从eclipse项目中的部署程序集设置中消失。

因此,另一个解决办法是:

代码语言:javascript
复制
eclipse{
        wtp{
            facet{
                ...
            }
            component{
                resource sourcePath: "build/common", deployPath: "/common"
                resource sourcePath: "$webAppDirName", deployPath: "/"
            }
        }
}

这样,eclipse的行为就像预期的那样,但它看起来很麻烦,我觉得我遗漏了一些东西,而eclipse插件应该会自动地做到这一点。

是否有更容易的方法来实现:

  1. Eclipse在从Eclipse部署时遵循在war{}块中定义的指定行为(在创建web应用程序之前提取一些JAR)。
  2. 以增量方式定义resources,而不从部署中清除webAppDirName文件夹

编辑:,让我重新描述这个问题:

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

代码语言:javascript
复制
src
 main
  java
  webapp
generated_source

build.gradle是这样的:

代码语言:javascript
复制
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

应该是这样的:

代码语言:javascript
复制
<?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>

但看起来是这样的:

代码语言:javascript
复制
<?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中的测试,看起来这个例子缺失了(我不是一个很棒的家伙)。

EN

回答 1

Stack Overflow用户

发布于 2015-07-18 14:06:59

您是否将"generated_source“目录添加到源集中?我有类似的项目设置,但我以不同的方式组织了生成的源目录:

代码语言:javascript
复制
src/main
  java
  generatedJava
  webapp

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

代码语言:javascript
复制
sourceSets.main.java {
        // added additional source folder for generated classes
        srcDir "${rootDir}/src/main/generatedJava"
}

这将导致预期的eclipse配置:

代码语言:javascript
复制
<?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上找到一个有用的示例构建

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22957776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档