1)我在Eclipse中使用Maven在我的pom.xml项目中包含了一个Spring Context依赖项。
2)我在项目上运行了“安装”阶段并且构建正确,项目已安装到我的本地.m2存储库
3)当我解压缩我的.JAR时,我只看到了我创建自定义的单个班级。
这提出了两个问题:
1)外部依赖类是否仅包含在最终构建的jar中,如果它的类在您的类中被物理实例化?
和
2)为什么当我将SpringContextAnnotationConfig类导入到我的类中并实例化它的实例并安装我的项目时,我仍然只在解压缩我的.JAR时看到了我的自定义类。这不寻常吗?或者SpringContextAnnotationConfig现在只是写入.class二进制文件,以便当我将.jar部署到另一个JVM时,它在我的自定义构建的.class二进制文件中有它的所有依赖项?
由于
解 :
问题是我期待maven为JAR输出做同样的事情,就像对WAR一样。使用webapp原型生成WAR文件时,Maven会自动将所需的依赖关系jar打包到WEB-INF目录中。
我基本上试图了解远程全新服务器上的容器如何在没有依赖项二进制文件的情况下运行我的类。我试图运行一个maven,用于生成一个JAR文件,该文件最终不包括我的依赖项。但是,当我运行maven install来构建WAR文件时,我的依赖关系已准备好部署。
答案 0 :(得分:2)
不,它们永远不会被包括在内(除非你使用一个特殊的插件来做到这一点)。
见1.
如果将此工件添加为某个其他项目的依赖项,则会自动添加其依赖项(及其依赖项等)(这是可控制的,因此您可以例如排除它们或更改版本)。但它们取自pom.xml
,而不取自.jar
本身。这也允许不多次下载相同的库。
用于制作脂肪罐,请参阅例如How can I create an executable JAR with dependencies using Maven?。特别是对于Spring,您可能需要Spring Boot。