11

我们有 2 个项目,1 个主项目和 1 个子项目,它们是 Java 项目。它们都在同一个目录下。

目录结构如下所示:

 ./dev
   ./Project_A
     build.gradle
     settings.gradle
   ./Project_B
     build.gradle

Project_A 包括 Project_B。

Project_A settings.gradle 看起来像:

includeFlat 'Project_B'

Project_A build.gradle 包含:

compile project(':Project_B')   

从命令行(gradlew clean build)编译时,问题Project_A 错过了 Project_B 中的类。看起来 Project_B 不属于 Project-A 的类路径。

这是gradlew clean build在 Project_A 目录中运行的(输出的一部分)(之后它是所有“package project_b.xy missing”和“cannot find symbol”(来自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...

我猜这是一个类路径问题,但我不知道如何解决它。

在此先感谢,JM

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

4

2 回答 2

10

基于Java Quckstart:多项目 Java 构建

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

include 'Project_A', 'Project_B'

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

dependencies {
    compile project(':Project_B')
}

编辑:

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

目录树

├── 项目_A
│ ├── build.gradle
│ ├── settings.gradle
│ └── src
│ └── 主要
│ └── java
│ └── 一个
│ └── A.java
└── 项目_B
    ├── build.gradle
    └── 源
        └── 主要
            └── java
                └── b
                    └── B.java

Project_A/build.gradle

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

mainClassName = 'a.A'

dependencies {
    compile project(':Project_B')
}

Project_A/settings.gradle

includeFlat 'Project_B'

爪哇

package a;
import b.B;

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

项目_B/build.gradle

apply plugin: 'java'

B.java

package b;

public class B {
    public static void call() {
        System.out.println("Calling B");
    }
}

从 运行 Gradle 时Project_A,输出为:

$ gradle clean build 运行
:clean 最新的
:Project_B:clean UP-TO-DATE
:Project_B:compileJava
:Project_B:processResources 最新
:Project_B:类
:Project_B:jar
:编译Java
:processResources 最新
:类
:罐
:集合
:compileTestJava 最新
:processTestResources 最新
:testClasses 最新
:测试最新
:检查最新的
:建造
:Project_B:组装
:Project_B:compileTestJava UP-TO-DATE
:Project_B:processTestResources 最新
:Project_B:testClasses 最新
:Project_B:test UP-TO-DATE
:Project_B:检查最新
:Project_B:构建
:跑
来自 A.main...
呼叫 B

构建成功
于 2014-05-02T13:20:23.220 回答
1

好的,如果这对某人有用,我终于可以通过实际删除(git rm).claspath 文件来完成这项工作。它在 .gitignore 中,但由于某种原因,它似乎在某个时候被提交并正在播放。

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

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

于 2014-05-09T13:20:38.103 回答