Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排除具有动态类加载的类_Java_Spring_Maven_Dependency Management_Dynamic Class Loaders - Fatal编程技术网

Java 排除具有动态类加载的类

Java 排除具有动态类加载的类,java,spring,maven,dependency-management,dynamic-class-loaders,Java,Spring,Maven,Dependency Management,Dynamic Class Loaders,我正在尝试构建一个中等规模的Java项目,以尽可能保持它的模块化和可伸缩性。要做到这一点,主架构将只负责在运行时加载JAR(模块)中提供的一些类。这种解决方案显然需要动态类加载,但它将把组件的耦合降至最低 现在,问题来了。每个模块都可能依赖于某些库(比如Hibernate、Spring…)。为了避免依赖性地狱,我将所有库与架构接口一起放在一个项目中,并将此项目作为所有模块的依赖项。理想情况下,我希望从类加载中排除此依赖项项目,以避免运行时出现问题 以下是我的问题: 首先,这是个好主意吗?有没有

我正在尝试构建一个中等规模的Java项目,以尽可能保持它的模块化和可伸缩性。要做到这一点,主架构将只负责在运行时加载JAR(模块)中提供的一些类。这种解决方案显然需要动态类加载,但它将把组件的耦合降至最低

现在,问题来了。每个模块都可能依赖于某些库(比如Hibernate、Spring…)。为了避免依赖性地狱,我将所有库与架构接口一起放在一个项目中,并将此项目作为所有模块的依赖项。理想情况下,我希望从类加载中排除此依赖项项目,以避免运行时出现问题

以下是我的问题:

  • 首先,这是个好主意吗?有没有更好的方法来解决我所缺少的这个问题
  • 这是我应该关心的吗?或者我不止一次地包含相同的类这一事实不会成为问题
  • 如果这是一个问题,那么从加载中排除该类的最佳方法是什么?我想按包装过滤,但我不确定
我仍然不确定是采用这种体系结构,还是使用Maven静态地构建完整的项目,不包括每个模块上的依赖项目

任何关于如何进行的建议都非常感谢

目前,我正在使用Maven构建和Spring作为框架,但我不介意添加其他技术


谢谢。

我想标准的方法是让maven/gradle/。。在构建前处理依赖关系,因为这些工具有排除依赖关系和解决依赖关系的方法——假设您为每个组件声明它需要什么,而不是有一大堆潜在的依赖关系。编辑:也许你可以看看“父项目”,就像这确实是标准一样,但你不能通过这种方式实现真正的模块化:假设我的应用程序运行在服务器上,为了插入模块,我必须停止服务器,重新编译所有内容,然后再次部署。这将使体系结构与模块相耦合。我并不认为与标准方法的耦合有什么问题,但需要特殊的运行时环境就不那么重要了。如果你想更新呢?或者核心架构中的一个依赖项。无论如何,你必须能够用新代码重新启动你的应用程序。我不明白。是否要从类加载中排除所有其他依赖的类?这是怎么回事?你知道类加载器有一个父加载器吗?标准行为是,类加载器首先检查父加载器,然后再查看自己的资源。如果先决条件通过父加载程序可用,则子加载程序不会克隆它们。如果您希望每个模块在公共接口的标识上达成一致,则甚至需要此设置。