我有 2 个库,我已将它们迁移到 Java 10 并使用了模块系统。
让我担心的第一件事是我遇到了很多错误,例如:
错误:java:未命名模块从 aspectjrt 和 org.aspectj.weaver 读取包 org.aspectj.internal.lang.reflect
。为了解决这个问题,我在模块信息中添加了 requires org.aspectj.weaver;
。实际上我不得不把很多我不使用的其他东西放在那里,但是例如 Spring 使用。只有这样我才能编译它。
所以最后,我的第一个库的模块信息如下所示:
module my.lib1 {
requires spring.context;
requires spring.core;
requires spring.context.support;
requires spring.beans;
requires org.aspectj.weaver;
requires slf4j.api;
requires metrics.core;
requires com.fasterxml.jackson.databind;
requires java.validation;
requires org.hibernate.validator;
requires javax.el;
exports my.lib1;
}
对于第二个库,我还必须添加很多依赖项使用的库,而不是我:
module my.lib2 {
requires org.hibernate.orm.core;
requires java.sql;
requires java.persistence;
requires spring.context;
requires spring.tx;
requires spring.orm;
requires spring.data.jpa;
requires spring.beans;
requires HikariCP;
requires metrics.core;
requires slf4j.api;
requires spring.core;
exports my.lib2;
}
两个库现在都在编译。我把它们放在我本地的 mvn 仓库中,并开始了第三个项目,这取决于这两个项目。
module my.project {
requires my.lib1;
requires my.lib2;
}
现在我遇到了同样的错误...错误:java:未命名的模块从 aspectjrt 和 org.aspectj.weaver 读取包 org.aspectj.internal.lang.reflect
,但这时间,添加 requires org.aspectj.weaver;
没有帮助。 我注意到,当我只将其中一个库放入模块时(不是两个都放在一起,而是一个 lib1 或 lib2),它会起作用。
我必须在我的模块信息中放置不同的库,这些库不是由我使用,而是由其他依赖项使用,这是否正常? (例如,要求 aspectj 不应该是 Spring 的责任吗?)。
最重要的是:如何解决依赖于我的两个库的项目的问题?
最佳答案
I have noticed when I put only one of the libs in the module (not both together, but one lib1 or lib2) it works.
使用模块系统,一个包可能仅由当前模块图中的单个模块提供。这是引入模块系统的主要原因之一:避免不明确的依赖关系(因为它们出现在经典类路径上;称为 split packages )。这就是为什么它只适用于您的一个模块。
在你的例子中,模块 aspectjrt
和 org.aspectj.weaver
都提供相同的包 org.aspectj.internal.lang.reflect
这就是错误消息的来源(未命名模块从 aspectjrt 和 org.aspectj.weaver 读取包 org.aspectj.internal.lang.reflect
)。
how do I fix the problem with my project which depends on my two libs?
喜欢Andy Guibert wrote对于这个话题,你可以:
解包
将它们捆绑在一个包中
希望第三方模块将来成为命名模块。
AspectJ 已经移植到模块系统。查看最新version ,如果您不使用它(需要 org.aspectj.runtime
,需要 org.aspectj.weaver
)?
此外,here您可以找到有关模块系统的更多信息。
关于Java 模块系统和 AspectJ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894265/