Java 不能';你不能使用maven+;spring创建全局存储库并减少重复库和/或部署复杂性?

Java 不能';你不能使用maven+;spring创建全局存储库并减少重复库和/或部署复杂性?,java,spring,maven,dependencies,Java,Spring,Maven,Dependencies,因此,Java的一个问题是,在同一个系统上会出现重复的库。现在我们有了像maven这样的产品,我一直在想为什么还需要这样。例如,对于在特定机器或特定应用服务器上运行的所有java应用程序,可能会有一个仅适用于最终发行版的中心repo。对于应用程序服务器,如果您在以编程方式处理依赖项的某个对象上创建了一个单独的依赖项,可能是通过Spring配置中类似maven的机制,那么您就不能让所有依赖项都自动处理吗?如果不能在Spring配置中完成,那么容器是否可以扩展?我想这个技巧可能是构建类路径,但这看起

因此,Java的一个问题是,在同一个系统上会出现重复的库。现在我们有了像maven这样的产品,我一直在想为什么还需要这样。例如,对于在特定机器或特定应用服务器上运行的所有java应用程序,可能会有一个仅适用于最终发行版的中心repo。对于应用程序服务器,如果您在以编程方式处理依赖项的某个对象上创建了一个单独的依赖项,可能是通过Spring配置中类似maven的机制,那么您就不能让所有依赖项都自动处理吗?如果不能在Spring配置中完成,那么容器是否可以扩展?我想这个技巧可能是构建类路径,但这看起来并不是不可克服的。特别是因为前三大操作系统现在都有符号链接。已经有一段时间没有研究过了,但现在似乎有一种方法可以在Java中处理和/或创建它们:

当然,符号链接甚至可能有些过分


我想我要问的是,您能否使用这些想法来大大简化所有Java SE/Java EE应用程序的依赖关系管理或部署?

IBM WebSphere当然有一个名为共享库的功能,您可以在其中创建库实体,然后将其导入多个项目中。在OracleWebLogic中,您可能可以部署为库,或者向
Weblogic应用程序.xml
添加路径。我认为没有必要使用maven。

容器喜欢并支持一个名为的标准,该标准将依赖关系管理扩展到部署领域

简而言之,发布一个“bundle”来声明包的运行时依赖关系,容器将确保版本正在运行(比J2EE容器的隔离类加载器方法更有效)

OSGi的真正问题是缺乏采用。工具有所改进,但Sun(现在的Oracle)从未将其作为J2EE的一部分。这似乎是“伟大的白人希望”,老实说,我最近没有关注OSGi对Jisaw的辩论


总之,将依赖关系管理扩展到部署领域是一个好主意,但需要容器支持。OSGi是我们所拥有的最接近标准的产品。

根据本文:


总之,这些想法是Java7的一部分。JVM将有一个称为Jigsaw的依赖项管理子组件,新的requires关键字将获取它需要的内容

我不清楚,你在说什么重复数据消除?您组织中Maven存储库中的JAR?我认为HDD空间非常便宜,以至于没有人关心这一点:消除重复所花费的时间将超过您将获得的磁盘空间。同意-听起来OP提出的解决方案将比他/她想要解决的问题产生更严重的后果(复杂性、脆弱性、启动速度较慢)。更不用说,这个问题到底是什么还不清楚。这取决于Tomcat是否也在同一台机器上运行,或者JSE应用程序是否也使用一些库。我们的目标是,如果硬盘上有一个可用的库,那么任何需要它的应用程序都应该可以使用它,而不需要冗余。sry我无法获得您问题的全部内容。因此,如果它依赖于容器,这自然意味着需要一个容器,为什么不使用一个J2SE Spring容器(可能是扩展的?)每台机器。这个容器将所有必需的库放在一个地方,这样应用程序和应用程序服务器就只有一个地方可以查找必需的库。为什么要重新发明轮子?OSGI和Jigsaw在这方面已经是一个太多的解决方案:-)