2017-01-04 70 views
0

我在我的java应用程序中使用Gradle构建。我的项目有elasticsearch综合测试。以下是我的gradle.build如何将我的测试包含在应用程序jar中

jar { 
    baseName = 'myproject' 
    version = 'V.4.0.0' 
    manifest { 
     attributes 'Main-Class': 'com.myapp.Application' 
    } 
    from { 
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
    } 
} 
test { 
    systemProperties = System.properties 
    systemProperty 'tests.security.manager', 'false' 
} 

当我给gradle build它执行测试并创建了myproject-V.4.0.0.jar。但是当我运行

java -cp myproject-V.4.0.0.jar;junit-4.11.jar junit.textui.TestRunner com.myapp.test.testclassname 

我没有找到类com.myapplication.test.testclassname的异常。 我提取了myproject-V.4.0.0.jar并找不到测试类。

我的问题是,我如何在我的应用程序jar中包含测试类?

+7

我可以问你为什么要这样做吗?你通常不想用你的应用程序jar发布你的测试 – tddmonkey

+0

@tddmonkey,是的,但是问题是我将不得不给我的集成测试时不时地执行。它不会在珠三角部署。对于珠三角,我将有一个干净的构建,没有任何测试。我怎么需要运送我的应用程序的一个副本与测试。 – Backtrack

回答

1

这是gradle java项目的故意行为。一个jar是你的生产工件,所以通常你想在构建过程中测试它,但是你不想在生产环境中运行你的测试,所以我不建议这样做。话虽如此,有这样一种做法,它在gradle中,像这样:

task myJar(type:Jar) { 
from {sourceSets.main.output + sourceSets.test.output} 
} 
+0

我已经试过这个,但仍然一样 – Backtrack

+0

你可以看看创建的jar,比如列出文件并检查它。我已经尝试过了,它确实包含了我的课程。如果你找不到这个类,那么你能写出你的项目中测试文件的确切路径吗?你使用gradle java插件吗? – OlgaMaciaszek

+0

我的测试已添加,但问题是,它仅添加.java文件而不是我的.class文件 – Backtrack

相关问题