有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

IntelliJ Idea中的java多重嵌套Gradle项目

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

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

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

我的问题是Idea没有正确识别二级Gradle子项目的Gradle结构:项目被很好地识别,研究开发被很好地识别,但是算法子项目没有被识别: 渐变的代码检查。算法中的build文件项目将突出显示为警告,并显示一条消息,提示测试无法应用于Groovy。lang.closure注意下面是完整的构建。格拉德尔

test{
  useTestNG()
  testLogging.showStandardStreams = true
}

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

当我为命令行运行Gradle时,它似乎工作得很好,并且能够识别所有嵌套项目:所有代码都在编译,测试都在运行
因此,这里的问题是,这里是否存在一个与Gradle不正常工作的想法问题,或者我做错了什么

构建的代码。gradle内部项目

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

设置的代码。gradle内部项目

rootProject.name = 'Project'
include 'Development'
include 'Development:Algorithms'
include 'Research'

构建的代码。开发子项目的gradle

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

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

项目。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>

发展。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>

算法。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。项目
  • 算法中。iml外部的原始(自动生成)值。链接。项目id:算法。我尝试将其设置为:Development:Algorithms,看看它是否会改变什么。每次更改后,我都会运行重建
  • 算法中。iml外部的原始(自动生成)值。根项目路径为$MODULE\u DIR$/。我已尝试将其设置为$MODULE\u DIR$/以查看它是否会改变任何内容。每次更改后,我都会运行重建

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

进一步调查显示工作区存在问题。xml文件: 那里有一个自动创建的GradleLocalSettings选项,但似乎是错误的:有两个不同的条目:一个用于开发和开发:算法,另一个用于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) 个答案