模块依赖情况下的jar包构建(一)

来源:互联网 发布:java获取post请求参数 编辑:程序博客网 时间:2024/06/06 03:52

1.添加子模块的依赖关系

一个子模块简单依赖关系的工程 example-project

如图所示是一个简单的工程模型,它包含了三个模块,其中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打包。
打包有两种方式,

  1. docker,直接打成jar可执行文件。
  2. war包

    因为我这里是springboot,如果需要打成jar,就需要插件
    这里写图片描述

注意,spring-boot-maven-plugin 这个插件不要放在example-parent里,也不要放在api里,只给web添加这个插件,否则你绝对打不出来可执行的jar,这个容器化构建的插件,后面会细说

关于打包的步骤

  1. 本地仓库安装parent
  2. 本地仓库安装api
  3. 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的父工程,也不能加插件。

阅读全文
2 0
原创粉丝点击