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

回到顶部