【发布时间】:2020-09-24 13:11:50
【问题描述】:
有两个项目:
- 经典(有主课)
- 高级
我希望高级版拥有Classic 拥有的所有课程。但是当我运行Advanced/gradle bootRun 时,所有Advanced 类似乎都不见了。
高级/src/main/java/foo/Bar.java:
package foo;
public class Bar{
//empty
}
Classic/src/main/java/foo/Classic.java:
package foo;
public class Classic {
public static void main(){
try {
Class.forName("foo.Bar");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
例外:
java.lang.ClassNotFoundException: foo.Bar
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:340)
at foo.Classic.main(Classic.java:14)
java.lang.ClassNotFoundException: foo.Bar
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:144)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:340)
at foo.Classic.main(Classic.java:14)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
我的 Advanced/build.gradle 中有这个:
...
dependencies{
...
implementation project(':classic')
...
}
...
来自评论的重要信息:
Jacob G.
我在其中一个聊天室和 OP 聊了一会儿,发现了一些事情。尝试使用 Gradle 构建 Advanced 项目时,它会报告 50+ 个关于 package not found: 的编译错误,指的是 Classic 项目中的包。此外,Classic 和 Advanced 不共享根项目,所以我觉得尝试依赖 project(':classic') 是徒劳的。 OP 声明只能对 Advanced 进行提交,因此可能根本无法解决该问题。对于任何好奇的人,OP 也没有使用 IDE。
尊重声明
我对问题进行了编辑,添加了限制。这是一个非常重要的编辑,我只能在 Advanced 中提交更改。由于我没有 gradle 经验,我不知道这些附加信息的重要性。为迟到感到抱歉,为礼貌感到安慰,希望理解。
【问题讨论】:
-
您正在尝试在经典模块中加载高级模块类 foo.Bar。根据 gradle config Classic 模块不依赖于 Advanced 模块它是相反的方式。
-
你能分享一个最小的可重现 git 吗?
-
@Grim 在那之前,我认为结构/模块的照片很有帮助。是在谈论一个具有多模块(Advance/Classic)的项目还是两个独立的项目?
-
我的意思是你的项目结构是什么,它们是多模块项目中的两个模块(共享父 gradle.build)还是独立的(没有相关的 gradle.build?)
-
@Grim 如果不是项目结构,我希望您分享您的 gradle 文件,以便我们可以识别您的孩子和父母的关系。
标签: java spring-boot gradle dependencies