模块依赖情况下的jar包构建(一)
来源:互联网 发布:java获取post请求参数 编辑:程序博客网 时间:2024/06/06 03:52
1.添加子模块的依赖关系
如图所示是一个简单的工程模型,它包含了三个模块,其中parent是api和web的父工程,web又依赖于api。
其中api只具有接口类,具体的实现由web去实现。可以看见HellowworldServiceImpl已经实现了api模块中的HellowworldService。
想要实现api的Hellowworld接口,在web的pom中添加api的依赖必不可少的。
简单的实现,打印Hello World
现在我们尝试让example-web跑起来
在实际开发中,程序员A只负责api的编写,api可能会交给B、C、D去实现,这样的好处是一旦程序员A更新了api代码,其他人只需要从git上把最新的api给down下来就能直接编写实现类了。这样避免了开发时需要相互拷贝代码的尴尬,并且负责实现的程序员B如果需要调用程序员C的方法,直接从代码中需要被注入的api接口调方法就可以了。是比较彻底的解耦方法。
2.如何将example-web打包
现在我们需要将web打包。
打包有两种方式,
- docker,直接打成jar可执行文件。
war包
因为我这里是springboot,如果需要打成jar,就需要插件
注意,spring-boot-maven-plugin 这个插件不要放在example-parent里,也不要放在api里,只给web添加这个插件,否则你绝对打不出来可执行的jar,这个容器化构建的插件,后面会细说
关于打包的步骤
- 本地仓库安装parent
- 本地仓库安装api
web执行打包jar/war
一步一步来,仔仔细细不要放过任何一个细节
这是我的本地仓库,里面还是空的
现在安装parent和api
mvn install
parent的
现在轮到api
这里我报错了,报错的原因我把api的springbootapplication删掉了,当maven执行test时找不到程序入口,反正api只是提供接口,本身不会通过容器启动。不用理他。直接 跳过测试安装
mvn -Dmaven.test.skip install
成功了,本地仓库已经有了构件
parent就是个pom,这里的api打包出来不会包含任何工程依赖文件,所以应该很小才对
最后对web进行打包
mvn clean package,跳不跳过测试根据自己需要来,要跳过就
mvn -Dmaven.test.skip package
将jar文件打出来了
现在试试看运行这个jar
没有问题
如果要打war包就改一下pom的packaging,改成war,步骤都一样
3.spring-boot-maven-plugin
spring-boot-maven-plugin是一个springboot构建容器的插件,通常情况下idea生成的springboot模块中中是会自动带上,插件会在构建过程中自动计算依赖关系向容器中添加依赖的jar。和无插件的maven install相比,虽然最后都生成一个可执行的jar文件,但是结构上有本质的区别,有插件的情况下,该jar是一个容器
可以供http请求访问。所有的classes文件和lib都放在boot-inf下面,处理http请求。
无插件地情况下对api进行打包
可以看到,按照类的包名结构,class文件是放在pers下面的,一层层下去会找到。
这就是api不能添加容器化插件的原因,容器化打出来的jar放在web的依赖里,web根本找不到要实现的类,路径就不对了。同理,作为api的父工程,也不能加插件。
- 模块依赖情况下的jar包构建(一)
- J2EE框架Jar包说明及各框架下的Jar包依赖关系(一)
- maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理
- maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理
- 使用ivy构建jar包的依赖关系
- 利用gradle shadowjar构建包含依赖的JAR包
- Maven总结(二)Maven构建可执行的jar包并且包含依赖jar包
- spring内部各模块jar包依赖
- spring内部各模块jar包依赖
- ant下构建jar包
- java混淆-外部依赖包已经混淆的情况下
- maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理 maven找不到符号
- windows下maven导出项目依赖的jar包
- Android studio gradle依赖,依赖爆红,fileTree一句代码实现项目lib下的所有jar包全部自动依赖
- 在没有源代码的情况下调试JAR包..
- Maven总结(一)Maven构建可执行的jar包
- Json.jar 的依赖包
- Spring 依赖的jar包
- 2-3 棋盘覆盖 | 分治
- 关于char占几个字节的问题如下
- 你的善良,要带点锋芒
- vs2015 fftw 一直无法打开xxx.lib的解决办法
- Week3Day3动画效果
- 模块依赖情况下的jar包构建(一)
- ./ sh source区别
- SourceTree认证仓库地址失败
- docker push 或pull镜像时报错,拒接链接
- Flex 布局
- 第二章 渲染流水线(上)---GPU流水线
- UVa 11354
- Project Euler__problem 6
- python与java的对比学习(一)