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

标签 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 不会按照 war{} 部分中的规定提取 configurations.common,因此 我不得不稍微改变一下脚本:

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 项目中的设置。

另一种解决方法:

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

这样,Eclipse 就会按预期运行,但看起来很麻烦,而且我觉得我错过了一些东西,而 eclipse-wtp 插件应该以某种方式自动执行此操作。

有没有更简单的方法来实现:

  1. 从 Eclipse 部署时,Eclipse 遵循 war{} block 中定义的规定行为(在创建 Web 之前提取一些 JAR) 应用程序)。
  2. 以增量方式定义资源,无需从部署中清除webAppDirName文件夹

编辑: 让我重新表述一下这个问题:

如果我有一个具有典型目录结构的 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 中的测试看起来这个案例不见了(我不是一个时髦的人)。

最佳答案

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

src/main
  java
  generatedJava
  webapp

然后只需要将生成的Java目录添加到源集中即可:

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

关于eclipse - gradle eclipse-wtp 插件添加 wb-resource 从部署中删除 webAppDir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22957776/

相关文章:

java - eclipse中如何自动部署maven项目到tomcat

hibernate - Gradle-插件任务未执行

eclipse - 使用eclipse wtp将web项目发布到tomcat后缺少类

java - 使用 m2eclipse 结合 WTP 构建 WAR(处理 webResources)

C++错误:undefined reference to `EnumProcesses@12

Android Eclipse 程序错误

java - Eclipse Bug - 类型不匹配 : cannot convert from Class<MatchedArticle> to Class<? 扩展 JsonSerializer<?>>

Android Studio 3rd 方库集成

android - Gradle 任务 "ExtractAarTransform"中的 "preDebugBuild"到底是什么意思?

java - Maven - 如何自定义依赖项的构建?