Java模块系统与AspectJ
我有两个库,我已经迁移到Java10并使用了模块系统 首先让我担心的是我犯了很多错误,比如:Java模块系统与AspectJ,java,Java,我有两个库,我已经迁移到Java10并使用了模块系统 首先让我担心的是我犯了很多错误,比如: 错误:java:未命名模块从aspectjrt和org.aspectj.weaver读取包org.aspectj.internal.lang.reflect。为了解决这个问题,我添加了requires org.aspectj.weaver到模块信息。事实上,我不得不在那里放很多我不用的东西,但比如Spring用的。直到那时我才能够编译它 最后,第一个库的模块信息如下所示: module my.lib1
错误: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;
}
对于第二个库,我还必须添加许多依赖项使用的lib,而不是我:
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
,但这次添加需要org.aspectj.weaver代码>没有帮助我注意到,当我只在模块中放置一个lib(不是两个都放在一起,而是一个lib1或lib2)时,它可以工作。
我必须在模块信息中放入不同的lib,而这些lib不是由我的而是由其他依赖项使用,这是否正常?(例如,要求aspectj不是Spring的责任吗?)
最重要的是:我如何解决我的项目的问题,这取决于我的两个LIB
我注意到,当我只在模块中放置一个lib时(不是两个都放在一起,而是一个lib1或lib2),它可以工作
使用模块系统,包只能由当前模块图中的单个模块提供。这是引入模块系统的主要原因之一:避免模棱两可的依赖关系(因为它们发生在经典类路径上;称为)。这就是为什么它只适用于您的一个模块
在您的例子中,两个模块aspectjrt
和org.aspectj.weaver
都提供相同的包org.aspectj.internal.lang.reflect
,这就是错误消息的来源(未命名模块从aspectjrt和org.aspectj.weaver读取包org.aspectj.internal.lang.reflect
)
如何解决依赖于两个LIB的项目的问题
与此主题类似,您可以:
打开包裹
把它们捆在一个包裹里
希望第三方模块将来成为命名模块
AspectJ已移植到模块系统。如果不使用最新版本(需要org.aspectj.runtime
,需要org.aspectj.weaver
),请选中它
此外,您还可以找到有关模块系统的更多信息