我正在使用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>
我想指出以下内容:
请告诉我是否应该在问题中添加其他信息。
由于
****************************编辑****************** **************
进一步调查显示 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>