Java 如何设置内置Gradle以不将JUnit测试用例部署到JBoss AS 7.1

Java 如何设置内置Gradle以不将JUnit测试用例部署到JBoss AS 7.1,java,junit,jboss,gradle,build.gradle,Java,Junit,Jboss,Gradle,Build.gradle,我有一个非常简单的JSF2应用程序,它只显示一个hello world页面。问题是这个应用程序有一个JUnit测试用例。当构建war文件以将其部署到JBoss AS 7.1中时,测试类会随之出现,导致加载应用程序时出现一些问题 build.gradle文件如下所示 apply plugin: 'java' apply plugin: 'eclipse-wtp' apply plugin: 'application' apply plugin: 'war' sourceCompatibility

我有一个非常简单的JSF2应用程序,它只显示一个hello world页面。问题是这个应用程序有一个JUnit测试用例。当构建war文件以将其部署到JBoss AS 7.1中时,测试类会随之出现,导致加载应用程序时出现一些问题

build.gradle文件如下所示

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

sourceCompatibility = 1.7
targetCompatibility = 1.7

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

// Needed in order to make the test running to work
sourceSets.main.output.resourcesDir = sourceSets.main.output.classesDir
sourceSets.test.output.classesDir = sourceSets.main.output.classesDir
sourceSets.test.output.resourcesDir = sourceSets.test.output.classesDir

def hibernateVersion = "4.3.7.Final"
def weldVersion = "1.1.27.Final"
def unidadesVersion = "1.0.0"
def demoiselleVersion = "2.4.1"
def arquillianVersion = "1.1.5.Final"

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    runtime 'javax.servlet:javax.servlet-api:3.1.0'
    runtime 'javax.enterprise:cdi-api:1.0-SP1'
    runtime 'org.jboss:jandex:1.2.2.Final'

    testCompile 'junit:junit:4.11'
    testCompile 'org.jboss.arquillian.junit:arquillian-junit-container:'+arquillianVersion    
    testCompile 'br.gov.frameworkdemoiselle.component:demoiselle-junit:2.3.1'
}

eclipse {
    wtp {
        facet {
            facet name: "java", version: "1.7"          // Java version
            facet name: "jst.web", version: "3.0"       // Dynamic Web Application
            facet name: "jst.jsf", version: "2.2"       // Java Server Faces
            facet name: "wst.jsdt.web", version: "1.0"  // JavaScript
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2.1'
}
在我的测试中,我执行了一些依赖项注入,这就是为什么我在测试依赖项中包含了Weld和Jandex

我希望,因为测试用例是在src/test/java中本地化的,所以它们不会包含在war文件中,但似乎我错了

我错过了什么?如何从战争中排除这些文件

更新1 按照建议操作后,build.gradle文件如下所示

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

sourceCompatibility = 1.7
targetCompatibility = 1.7

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}

def hibernateVersion = "4.3.7.Final"
def weldVersion = "1.1.27.Final"//"2.2.7.Final" Demoiselle 2.4.1 não é compatível com Weld 2
def unidadesVersion = "1.0.0"
def demoiselleVersion = "2.4.1"
def arquillianVersion = "1.1.5.Final"

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    compile 'org.jboss.weld.se:weld-se-core:'+weldVersion

    runtime 'javax.servlet:javax.servlet-api:3.1.0'
    runtime 'javax.enterprise:cdi-api:1.0-SP1'
    runtime 'org.jboss:jandex:1.2.2.Final'
    runtime 'org.slf4j:slf4j-log4j12:1.7.7'

    testCompile 'junit:junit:4.11'
}

war {
}

eclipse {
    wtp {
        facet {
            facet name: "java", version: "1.7"          // Java version
            facet name: "jst.web", version: "3.0"       // Dynamic Web Application
            facet name: "jst.jsf", version: "2.2"       // Java Server Faces
            facet name: "wst.jsdt.web", version: "1.0"  // JavaScript
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.2.1'
}
这就是我的Eclipse项目的样子

这就是JBossAS7.1部署文件夹包含的内容

图A显示/src/test/java下的文件夹包含在war中,并部署在JBoss中

更新2 我在build\lib中查看了生成的war文件。它不包含任何测试类,所以我相信JBoss面板执行完整的构建,包括它可以在另一场战争中编译的所有内容,然后对其进行开发

因此,我相信war插件工作正常,没有部署任何测试文件

迷雾还在继续

更新3 经过一些额外的学习,我终于明白发生了什么。在运行任何Gradle任务(比如gradleclean)之后,Gradle会向Eclipse的部署程序集中添加一个条目。这个条目就是testclasses文件夹。有了这样一个条目,JBoss发布代理将始终部署src/test/java以下的任何内容

因此,解决此问题的一种方法是打开“项目属性”窗口并手动从中删除该条目。然而,Gradle是关于自动构建和配置的,所以我希望能够配置我的Gradle构建,以避免在那里添加这样的条目


有什么想法吗?

这一行有效地将测试类转换为生产类:sourceset.test.output.classesDir=sourceset.main.output.classesDir。删除这一行,它应该是不需要的。

谢谢你的回答,但我尝试了,此时build.gradle不包含这些行,但问题仍然存在。如果测试类真的在src/test/java中,这是不可能的。确保保存构建文件,进行干净的构建,并仔细检查结果。我按照您的建议做了,得到了相同的结果。然后,由于这是一个非常小的项目,我决定将其从JBoss中删除,并删除其部署文件夹,删除所有源代码,并将该项目从Eclipse工作区中完全删除。什么都没有了。然后我又开始了,一块一块地添加并检查结果。当我最终添加src/test/java的内容并第一次构建war时。在JBoss中部署之后,测试文件夹中的所有内容都将被删除。所以,我们回到了起点。