java - 智能 : Specifying different groovyc version for source and test within same module

标签 java groovy intellij-idea ivy spock

我正在使用 IntelliJ 11.1.3IvyIDEA Plugin for IntelliJSpock 0.5(这取决于 Groovy 1.8.4 ) 和 Groovy 1.5.6

我有一个遵循 Maven Standard Directory Layout 的 IntelliJ 模块.输出是一个 WAR 文件。

在 IntelliJ 中构建此模块时,有什么方法可以告诉 IntelliJ 使用以下内容:

  • Groovy 1.5.6 编译src/main/groovy
  • Groovy 1.8.4编译src/test/groovy

我需要这样做,因为实际的应用程序代码需要针对 Groovy 1.5.6 进行编译(长话短说:生成的 WAR 部署了一个必须保留在 上的 EAR >Groovy 1.5.6 现在)。

当然,测试目录不会随 WAR 一起部署。测试目录包含 Spock 测试。我正在使用 Spock 0.5,它需要 Groovy 1.8.x

ivy.xml

<dependency conf="compile->default" name="groovy-all" 
    org="org.codehaus.groovy" rev="1.5.6"/>

<dependency conf="test->default" name="groovy-all" 
    org="org.codehaus.groovy" rev="1.8.4"/>
<dependency conf="test->default" name="spock-core" 
    org="org.spockframework" rev="0.5-groovy-1.8"/>

我需要能够从 IntelliJ 运行测试。如果我从 IntelliJ 构建并尝试运行 Spock 测试,我会得到以下信息:

org.spockframework.runtime.InvalidSpecException: 
Specification 'org.myorg.test.ProcessCaseTest' was not compiled properly 
(Spock AST transform was not run); try to do a clean build
at org.spockframework.runtime.SpecUtil.checkIsSpec(SpecUtil.java:53)

如果我删除这一行:

<dependency conf="compile->default" name="groovy-all" 
    org="org.codehaus.groovy" rev="1.5.6"/>

然后我可以构建并运行 Spock 测试,但是我从我的模块中丢失了 Groovy。

我认为我需要做的是告诉 IntelliJ 使用一个版本的 Groovy 来编译应用程序代码,并使用另一个版本的 Groovy 来编译测试,但我还没有找到一种方法来执行此操作。

我将非常感谢任何人可以提供的任何帮助或见解。非常感谢。

最佳答案

IDEA 遵循 Maven 依赖模型,其中 compile 依赖自动进入 test 类路径。您可以尝试对 IDEA 模块中的依赖项重新排序,以便 Groovy 1.8(其范围应为 test)出现在 Groovy 1.5(其范围应为compile)之前。无论如何,这是一件毛茸茸的事情。

PS:我推荐使用Spock 0.6。

关于java - 智能 : Specifying different groovyc version for source and test within same module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204699/

相关文章:

testing - Geb JUnit4 自动生成的测试

grails - 域对象上的 Class.forName newInstance 不是来自 grails 外部的 GroovyObject

eclipse - Eclipse 有 "Syntax Aware Selection"功能吗?

scala - Scala 的 Intellij Idea 设置,需要澄清

java - GSon是否弄乱了时间戳变量

java - 在 Java 2D ArrayList 中转置值

java - Servlet 3,web.xml 中的 <async-supported>true</async-supported> 与 asyncSupported=false

java - "Cannot find symbol"错误 - 即使是一个非常简单的例子

java - 向应用程序添加脚本安全性

java - 无法使用java进程运行mvn