Java src/test中Jar文件中的主类

Java src/test中Jar文件中的主类,java,gradle,testng,Java,Gradle,Testng,我需要分发一个集成测试,它位于src/test下。所以我用gradle构建了一个指向这个类的jar 我在网上翻来翻去发现了这一点: task fatJar(type: Jar) { zip64 = true manifest { attributes 'Implementation-Title': 'Gradle Jar File Example', 'Implementation-Version': 1.3, 'Main-Clas

我需要分发一个集成测试,它位于src/test下。所以我用gradle构建了一个指向这个类的jar

我在网上翻来翻去发现了这一点:

task fatJar(type: Jar) {
  zip64 = true
  manifest {
    attributes 'Implementation-Title': 'Gradle Jar File Example',
            'Implementation-Version': 1.3,
            'Main-Class': 'org.example.AnIntegrationTest'
  }
  from sourceSets.test.output
}
当我尝试运行此功能时,我得到:

Error: Could not find or load main class org.example.AnIntegrationTest
main方法就在那里,“jar tf”确实向我显示了包中的类


这里缺少什么?

您的jar文件缺少测试运行时依赖项。一种可能的解决方案是将所有必需的依赖项也打包到jar中。请注意,这将增加可分发jar的大小

在jar任务中添加一个附加的
from
子句:

task fatJar(type: Jar) {
  zip64 = true
  manifest {
    attributes 'Implementation-Title': 'Gradle Jar File Example',
            'Implementation-Version': 1.3,
            'Main-Class': 'org.example.AnIntegrationTest'
  }
  from sourceSets.test.output

  //collect all dependencies
  from { configurations.testRuntime.collect { it.isDirectory() ? it : zipTree(it) } }
  with jar
}

您是否使用
java-jar YourFatJar.jar
来运行它,下面是完整的命令/输出:java-jar build/libs/fatJar.jar错误:找不到或加载主类org.example.aniintegrationtest jar tf build/libs/fatJar.jar | grep aniintegration org/example/aniintegrationtest.class org/example/aniintegrationtest$ParallelUpload.class.class缺少依赖项。我想您的测试jar需要来自主jar的类?是的,当我从IntelliJ运行它时,它工作得很好。所以我认为缺少的依赖项会在编译过程中更早地出现??这些依赖项在编译过程中可用,因为intelliJ/gradle提供了它们。在打包Jar并使用java运行它之后,java本身不知道在哪里查找依赖项。您可以将所有依赖项(包括传递项)放在与integ测试jar相同的文件夹中,并将依赖项行添加到清单中,或者将所有依赖项打包到integ jar中,以生成一个自包含的可执行jar.Damm,这看起来很有希望。不幸的是,这不管用。同样的问题。我确实得到了一个大得多的罐子。我确实在jar.oops中有main/&test/中的类,我的配置错误,应该是
testRuntime
,除非你有一个单独的整型测试配置?我不明白?您的示例中有testRuntime。我想我没有其他的集成配置,尽管我对gradle很陌生。另外,如果我看到jar中的所有类,这不可能是一个依赖关系,对吗?我刚刚编辑了我的答案,将编译更改为testRuntime。尝试在项目中使用testRuntime.Doh!没有意识到,是的,就是这样,谢谢你