ItelliJ中的多项式Gradle项目

时间:2015-09-20 13:49:37

标签: java intellij-idea gradle

我正在使用IntelliJ Idea 14.1.4和Gradle,我正在尝试创建子项目和嵌套子项目:

Project
|--Research
|--Development
   |--Algorithms

原因是研究算法与开发实现是分开的。它们用不同的语言编写(Python与Java)并由不同的程序员使用,但是我仍然希望维护一个Gradle项目,因此最终研究人员能够在开发新的算法时使用稳定的现有算法实现。

我的问题是,Idea没有正确识别二级Gradle子项目的Gradle结构:项目被认可,研究开发得到了很好的认可,但算法子项目无法识别: 算法项目中 gradle.build 文件的代码检查会突出显示为警告,并显示消息 test不能应用于Groovy.lang.closure 请注意,以下是完整的 build.gradle

test{
  useTestNG()
  testLogging.showStandardStreams = true
}

此外,当我尝试使用Idea 运行 - >编辑配置 - >默认值 - > Gradle 并尝试选择Gradle项目时,我会在弹出菜单中看到开发研究确实显示为项目的子项目,但算法显示为独立项目。
然而,使项目创建所有二进制文件并手动运行测试用例也很有效。

当我为命令行运行Gradle时,它似乎运行良好并识别所有嵌套项目:正在编译所有代码并正在运行测试。
所以这里的问题是这里是否存在一个与Gradle无法正常工作的Idea问题,或者我做错了什么?

项目 build.gradle 的代码:

allprojects {
  group 'com.project'
  version 'v0.1'
  repositories {
    mavenCentral()
  }
}

项目

settings.gradle 的代码
rootProject.name = 'Project'
include 'Development'
include 'Development:Algorithms'
include 'Research'

开发子项目的 build.gradle 代码:

subprojects {
  apply plugin: 'java'
  repositories {
    jcenter()
  }
  dependencies{
    testCompile 'org.testng:testng:6.9.4'
  }
}

我可能写错的其他代码示例(大多数是由Idea自动生成的:

Project.iml

<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="Project"      external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="com.project" external.system.module.version="v0.1" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/build" />
    <output-test url="file://$MODULE_DIR$/build" />
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
      <excludeFolder url="file://$MODULE_DIR$/build" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

Development.iml

<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":Development" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="com.project" external.system.module.version="v0.1" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/build" />
    <output-test url="file://$MODULE_DIR$/build" />
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
      <excludeFolder url="file://$MODULE_DIR$/build" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

Algorithms.iml

<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":Development:Algorithms" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="com.project" external.system.module.version="v0.1" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/build/classes/main" />
    <output-test url="file://$MODULE_DIR$/build/classes/test" />
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
      <excludeFolder url="file://$MODULE_DIR$/.gradle" />
      <excludeFolder url="file://$MODULE_DIR$/build" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="module-library" scope="TEST">
      <library>
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/plugins/testng/lib/testng.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
  </component>
</module>

我想指出以下内容:

  • 所有项目和子项目都具有相同的组: com.project
  • Algorithms.iml 中, external.linked.project.id 的原始(自动生成)值为:算法。我已经尝试将其设置为:开发:算法以查看它是否会改变任何内容。每次更改后,我都进行了重建。
  • Algorithms.iml 中, external.root.project.path 的原始(自动生成)值 $ MODULE_DIR $ / .. 。我已经尝试将其设置为 $ MODULE_DIR $ / .. / .. 以查看它是否会改变任何内容。每次更改后,我都进行了重建。

请告诉我是否应该在问题中添加其他信息。

由于

****************************编辑****************** **************

进一步调查显示 workspace.xml 文件存在问题: 有一个 GradleLocalSettingsElement ,它是自动创建的,但似乎是错误的:有两个不同的条目:一个用于开发和开发:算法和其余的onw,所以我可能做错了什么时候我创建了这个项目。 我的问题是,是否存在对此文件结构的引用,特别是Gradle插件插入的元素的引用?

<map>
  <entry>
    <key>
      <ExternalProjectPojo>
        <option name="name" value="Development" />
        <option name="path" value="$PROJECT_DIR$/Development" />
      </ExternalProjectPojo>
    </key>
    <value>
      <list>
        <ExternalProjectPojo>
          <option name="name" value="Development" />
          <option name="path" value="$PROJECT_DIR$/Development" />
        </ExternalProjectPojo>
        <ExternalProjectPojo>
          <option name="name" value=":Development:Algorithms" />
          <option name="path" value="$PROJECT_DIR$/Development/Algorithms" />
        </ExternalProjectPojo>
      </list>
    </value>
  </entry>
  <entry>
    <key>
      <ExternalProjectPojo>
        <option name="name" value="Project" />
        <option name="path" value="$PROJECT_DIR$" />
      </ExternalProjectPojo>
    </key>
    <value>
      <list>
        <ExternalProjectPojo>
          <option name="name" value="Project" />
          <option name="path" value="$PROJECT_DIR$" />
        </ExternalProjectPojo>
        <ExternalProjectPojo>
          <option name="name" value=":Development" />
          <option name="path" value="$PROJECT_DIR$/Development" />
        </ExternalProjectPojo>
        <ExternalProjectPojo>
          <option name="name" value=":Research" />
          <option name="path" value="$PROJECT_DIR$/Research" />
        </ExternalProjectPojo>
      </list>
    </value>
  </entry>
</map>

0 个答案:

没有答案