1

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

我有一个遵循Maven 标准目录布局的 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

常春藤.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 来编译测试,但是我还没有找到一种方法来做到这一点。

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

4

1 回答 1

3

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

PS:我推荐使用Spock 0.6。

于 2012-08-30T21:57:37.010 回答