Gradle子项目未包含在类路径中

jmc*_*c34 8 java subproject gradle

我们设置了2个项目,1个主项目和1个子项目,它们是Java项目.它们都在同一个目录下.

以下是目录结构的外观:

 ./dev
   ./Project_A
     build.gradle
     settings.gradle
   ./Project_B
     build.gradle
Run Code Online (Sandbox Code Playgroud)

Project_A包括Project_B.

Project_A settings.gradle看起来像:

includeFlat 'Project_B'
Run Code Online (Sandbox Code Playgroud)

Project_A build.gradle包含:

compile project(':Project_B')   
Run Code Online (Sandbox Code Playgroud)

这个问题 Project_A从Project_B命令行(编译时错过类gradlew干净生成).看起来Project_B不属于Project-A的类路径.

这是来自gradlew clean build的(输出的一部分)在Project_A目录中运行(之后它全部是"package project_b.xy missing"和"找不到符号"(来自Project_B):

:clean
:Project_B:clean
:Project_B:compileJava
:Project_B:processResources
:Project_B:classes
:Project_B:jar UP-TO-DATE
:compileJava
...Starts erroring out here...
Run Code Online (Sandbox Code Playgroud)

我猜这是一个类路径问题,但我无法弄清楚如何解决它.

在此先感谢,JM

PS:编辑问题,因为我能够通过2个项目构建重现问题(从3开始)

kup*_*fic 9

基于Java Quckstart:多项目Java构建:

1)你的settings.gradle文件需要在dev/,而不是dev/project_A它应该包含这样的东西:

include 'Project_A', 'Project_B'
Run Code Online (Sandbox Code Playgroud)

2)然后你的dev/Project_A/build.gradle文件应该包含

dependencies {
    compile project(':Project_B')
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我按照您在问题中描述的项目布局创建了一个玩具示例.但是,我无法重现这个问题.也许您将能够发现导致您特定错误的一些差异:

目录树

??? Project_A
?   ??? build.gradle
?   ??? settings.gradle
?   ??? src
?       ??? main
?           ??? java
?               ??? a
?                   ??? A.java
??? Project_B
    ??? build.gradle
    ??? src
        ??? main
            ??? java
                ??? b
                    ??? B.java

Project_A /的build.gradle

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'a.A'

dependencies {
    compile project(':Project_B')
}
Run Code Online (Sandbox Code Playgroud)

Project_A/settings.gradle

includeFlat 'Project_B'
Run Code Online (Sandbox Code Playgroud)

A.java

package a;
import b.B;

public class A {
    public static void main(String[] args) {
        System.out.println("From A.main...");
        B.call();
    }
}
Run Code Online (Sandbox Code Playgroud)

Project_B /的build.gradle

apply plugin: 'java'
Run Code Online (Sandbox Code Playgroud)

B.java

package b;

public class B {
    public static void call() {
        System.out.println("Calling B");
    }
}
Run Code Online (Sandbox Code Playgroud)

运行Gradle时Project_A,输出为:

$ gradle clean build run
:clean UP-TO-DATE
:Project_B:clean UP-TO-DATE
:Project_B:compileJava
:Project_B:processResources UP-TO-DATE
:Project_B:classes
:Project_B:jar
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build
:Project_B:assemble
:Project_B:compileTestJava UP-TO-DATE
:Project_B:processTestResources UP-TO-DATE
:Project_B:testClasses UP-TO-DATE
:Project_B:test UP-TO-DATE
:Project_B:check UP-TO-DATE
:Project_B:build
:run
From A.main...
Calling B

BUILD SUCCESSFUL


jmc*_*c34 1

好吧,如果这对某人有用,我终于通过实际删除 (git rm) .claspath 文件来实现这一点。它在 .gitignore 中,但由于某种原因,它似乎在某个时刻被提交并正在玩耍。

执行此操作并在 Eclipse 中重新导入项目后,一切都恢复正常。

感谢那些试图提供帮助的人。