【问题标题】:Java executable jar file with missing package and its contents缺少包及其内容的 Java 可执行 jar 文件
【发布时间】:2020-07-24 22:18:15
【问题描述】:

我继承了由 cucumber、junit 和 selenium 框架组成的 java maven 项目,除了 Junit 之外我是新手。我注意到它的 pkg 名称在 src/test/java 而不是 src/main/java 下。

src/test/java
    com.somewhere.test
        FooRunner.java

有人告诉我,我可以通过在 Eclipse IDE 中右键单击 Run as > Junit Test 从 FooRunner 类运行 junit 测试。

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(features="src/test/resources/com/sowhere/test/features",tags = {"@Test"}, plugin = {
    "pretty",
    "junit:target/results.xml",
    "html:target/cucumber"},
    dryRun = false)

public class FooRunner {
  public static void main(String[] args) {
    
  }
}

我能够很好地运行它的单元测试。我的问题是我需要这个 mvn 项目来生成 executable jar 文件然后能够从

运行它的单元测试
java -jar Foo.jar

我通过更新 pom.xml 文件并添加 public static void main 方法将这个线程跟踪到 Running Cucumber tests directly from executable jar 但是当我执行 jar 文件时收到以下错误消息..

Error: Could not find or load main class com.somewhere.test.FooRunner

我将 jar 更改为 zip,然后将其全部解压缩。令人惊讶的是,我没有看到 pkg 名称 com.somewhere.test 但我看到了外部库的其他 pkg,例如 cucumber 等。是的 META-INF/MANIFEST.MF 是我相信有适当的数据。

我很想知道为什么 pkg(即 com.somewhere.test)与类(即 FooRunner.class)一起丢失

更新:

我从这个帖子中找到了答案:How can I include test classes into Maven jar and execute them?

【问题讨论】:

  • 请更新您的 pom.xml 文件

标签: java maven


【解决方案1】:

Maven 有一个 src/main/java/,其类进入产品 jar,而 src/main/test/java/ 其类进入测试 jar (或只是经过测试),不需要运行应用程序。这种分离是有道理的。测试 jar 也依赖于生产 jar,因为它会测试这些类。

这个test jar可以用目标jar:test

创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2017-07-04
    • 2014-11-10
    • 2012-05-04
    • 2017-05-30
    • 1970-01-01
    • 2012-03-12
    相关资源
    最近更新 更多