我正在使用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
)
当然,Test目录不会与WAR一起部署。 Test目录包含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来编译测试,但是我还没有找到办法来做到这一点。
我非常感谢任何人都能提供的任何帮助或见解。非常感谢你。
答案 0 :(得分:3)
IDEA遵循Maven依赖模型,其中compile
依赖项自动进入test
类路径。您可以尝试的是重新排序IDEA模块中的依赖项,以便Groovy 1.8(应该具有范围test
)出现在Groovy 1.5之前(应该具有范围compile
)。无论如何,这是一个毛茸茸的事情。
PS:我建议使用Spock 0.6。