我正在使用 IntelliJ 11.1.3
、IvyIDEA Plugin for IntelliJ
、Spock 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/