【问题标题】:Adding @RunWith for jbehave-junit-runner breaks JBehave build using Maven为 jbehave-junit-runner 添加 @RunWith 会破坏使用 Maven 构建的 JBehave
【发布时间】:2014-12-24 00:02:52
【问题描述】:

我将 JBehave 与我也在 E​​clipse 中开发的 Maven 构建一起使用,并且有时在 Eclipse 中使用 JUnit 运行器运行我的单元测试。我发现 jbehave-junit-runner 可以很好地美化 JUnit runner 中的 JBehave 故事。但是,添加 jbehave-junit-runner 似乎破坏了我的 Maven 构建。

安装https://github.com/codecentric/jbehave-junit-runnermvn clean install的结果:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[28,23] error: package org.junit.runner does not exist
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[42,1] error: cannot find symbol
[ERROR]   symbol: class RunWith
/Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[28,23] error: package org.junit.runner does not exist
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[42,1] error: cannot find symbol
[ERROR]   symbol: class RunWith
/Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[50,28] error: cannot access Runner
[INFO] 5 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.043 s
[INFO] Finished at: 2014-12-23T15:38:39-08:00
[INFO] Final Memory: 14M/156M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project followerdownloader-frontend: Compilation failure: Compilation failure:
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[28,23] error: package org.junit.runner does not exist
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[42,1] error: cannot find symbol
[ERROR] symbol: class RunWith
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[28,23] error: package org.junit.runner does not exist
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[42,1] error: cannot find symbol
[ERROR] symbol: class RunWith
[ERROR] /Users/mosofsky/Developer/FollowerDownloader/followerdownloader-frontend/src/main/java/com/netbase/followerdownloader/FollowerDownloaderStories.java:[50,28] error: cannot access Runner
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

https://github.com/codecentric/jbehave-junit-runner 是什么破坏了我的构建?

【问题讨论】:

    标签: eclipse maven junit bdd jbehave


    【解决方案1】:

    解决问题的方法是通过在 pom.xml 文件中的 junit 中去掉 test 元素来拓宽 junit 的范围:

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <!-- <scope>test</scope> -->     <!-- SOLUTION: COMMENTED OUT THIS LINE -->
    </dependency>
    

    我想我偶然发现了 JBehave 和行为驱动设计 (BDD) 的悖论:

    我担心如果我不再将 junit 的范围限制为 Maven standard test directory,我的解决方案可能会对我的生产代码产生影响。

    不过,我的解决方案确实解决了原来的问题。

    【讨论】:

    • JBehave 正在讨论为行为创建一个自己的模块。使 junit 仅在该模块中编译范围,那么 JUnit 将不会成为您的生产代码的一部分,除非您的行为不是您的生产代码的一部分。
    • 谢谢@StefanBirkner。我有很多事情要解决,因为我试图在 Google App Engine 上完成这项工作,它对模块有自己的要求 (cloud.google.com/appengine/docs/java/modules)。一个相关的问题是如何在所有这些模块之间共享代码 (stackoverflow.com/questions/27388111/…)。我敢肯定这些问题没有简单的答案,但如果您有更多见解,我会欢迎他们。
    • 抱歉,我没有更多的见解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多