最近工作中使用dubbo架构对外提供接口,dubbo接口放在项目的单独模块中,dubbo接口的参数中使用到common模块中的模型,在对外提供jar包的时候需要将common的模型和dubbo接口模块一并打到包中对外提供。
最开始的时候没有考虑到模型的打包,所以打包出来的jar中只包含dubbo接口的class,dubbo消费者在使用接口的时候无法正确传参;后面加入依赖打包的时候将common依赖的其他jar也一并打到jar包中,整个包50M,实际上项目只关注common中定义的数据模型,最完美的只要打包dubbo接口的class和所有数据模型的class。
后续解决如下,在要打包的模块pom文件使用maven提供的插件
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
有关这个插件的详细使用可以google或者百度一下,我从网上搜索到的东西没能直接完成我要的效果,后面经过摸索实现。写完配置后再idea中右侧的maven按钮,选择对应的模块,LifeCycle,package。(指令的话是 mvn 模块名 package吧,这个不清楚,没有探索过,请知道的大佬补充一下)。生成的jar包大小160k,只包含dubbo模块所有的内容和依赖的common模块里面数据模型目录下所有的内容。直接上pom配置
<build>
<!-- 为最终的jar包取名 -->
<finalName>iwant</finalName>
<plugins>
<!--打包的时候只要common依赖里面的bean目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<includes>
<!--指定需要的jar包,include标签可以多个-->
<include>com.myself.example:myself-common</include>
</includes>
</artifactSet>
<filters>
<filter>
<!--指定jar包里面需要的目录-->
<artifact>com.myself.example:myself-common</artifact>
<includes>
<include>com/myself/example/common/bean/**</include>
</includes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
输出的jar包有两个,带有origin字眼的是dubbo模块不包含依赖的jar包,不带origin的才是我想要的jar包。
仅供参考,有疑问可以相互讨论,不过有些问题可能我也不太熟。转载请写明出处