格拉德尔奔跑投掷"Error: Could not find or load main class"



项目结构为:

src
---main
---test
---java
---ExecutionClass
---TestNGMain.java

build.gradle类似于:

plugins {
id 'java'
}
apply plugin: 'application'
mainClassName = 'test.java.ExecutionClass.TestNGMain'
jar {
manifest {
attributes 'Main-Class': 'test.java.ExecutionClass.TestNGMain'
}
}
sourceSets {
test {
java {
srcDirs= ['src/test/java']
}
resources {
srcDirs= ['src/test/resources']
}
}
}

渐变构建-工作良好

gradle run-throws错误"找不到或加载主类">

默认情况下,应用程序插件只将main源代码集视为要分发的应用程序代码。如果你真的想在测试源集中运行代码,那么一个选项是在主(坏主意(中包括测试源

sourceSets {
main{
java{
srcDir("src/test/java")
}
}
}

您案例中的mainClassName = "<package-name>.<class-name>"mainClassName = "ExecutionClass.TestNGMain"

另一种方法是自定义main分发版以包含测试文件。

可以使用JavaExec而不是application插件从src/test运行类:

task runExample(type: JavaExec, dependsOn: "compileTestJava") {
classpath = sourceSets.test.runtimeClasspath
mainClass = "com.example.Example"
}

应用程序插件的目的不仅仅是运行一个类,而是对应用程序进行打包,以便可以部署、交付给客户等。通常不希望在运行时包含所有测试内容。

因此,尝试使用application插件来运行src/test中的任何内容通常都是个坏主意

最新更新