Maven循环依赖
我有一个模块化的maven项目,其中两个模块“ BIZ”和“ EJB”包含如下内容:
//PART OF "BIZ" Module:public interface MyInterface{
public void foo();
}
............................................
public class ImplFactory{
public static MyInterface getInterfaceImplementation(){
MyInterface ret=null;
Class<? extends MyInterface> cl = null;
try {
cl= (Class<? extends MyInterface>) Class.forName("InterfaceImpl");
ret= cl.newInstance();
}
....
ret ret;
}
.......................................
public class MyClassX{
public static void doSomethingX(){
}
}
//PART OF "EJB" Module:
public class InterfaceImpl implements MyInterface
@EJB
private MyEJB1 ejb1;
public void foo(){
ejb1.doSomething();
}
........................................
@Stateless
public class MyEJB1{
public void doSomething(){
...
MyClassX.doSomethingX();
....
}
}
如您所见, 因为它使用 MyClassX (实际上,它使用了BIZ的几种类别)。这就是
ImplFactory 使用反射实例化 InterfaceImpl 的原因。问题是 cl.newInstance() 将抛出
因为这两个模块分别属于WAR和JAR(模块“ EJB”被编译为type =“ ejb”并使用maven
ejb插件编译)并使用不同的ClassLoader(它在JBoss 7上运行)。另一方面, InterfaceImpl 无法移动到BIZ,因为它需要
MyEJB1 来完成其工作,这将引入循环依赖性。
所以我的问题是:如何解决这个棘手的问题(以编程方式或通过更改配置)?我希望你能帮帮我!谢谢!
回答:
您应该对这些依赖项进行更多拆分。
这样的事情会更好:
。├──pom.xml
├──my-api(“ API”)
| ├──pom.xml
| └──src
| └──主要
| └──java
| └──我的
| └──包
| └──MyInterface.java
├──my-ejb(“ EJB”)
| ├──pom.xml
| └──src
| └──主要
| └──java
| └──我的
| └──包
| └──InterfaceImpl.java
└──my-web(“ BIZ”)
├──pom.xml
└──src
└──主要
├──Java
| └──我的
| └──包
| └──ImplFactory.java
└──webapp
└──WEB-INF
└──web.xml
BIZ
取决于EJB
取决于API
。
现在,这将解决您的迫在眉睫的问题,但是我不建议您创建这些工厂,而应该使用CDI,但这是另一回事了。
以上是 Maven循环依赖 的全部内容, 来源链接: utcz.com/qa/398728.html