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开始)
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
好吧,如果这对某人有用,我终于通过实际删除 (git rm) .claspath 文件来实现这一点。它在 .gitignore 中,但由于某种原因,它似乎在某个时刻被提交并正在玩耍。
执行此操作并在 Eclipse 中重新导入项目后,一切都恢复正常。
感谢那些试图提供帮助的人。