Dubbo的Maven打包
2016-03-30 14:32
274 查看
Maven项目的依赖,我们可以通过下面命令看到,打包时,会按照这个依赖编译进去对应模块。参考:http://www.cnblogs.com/ghj1976/p/5336923.html
以Dubbo的dubbo-demo-provider为例,我们在它的pom文件中可以看到如下插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
这里的第四行我们指定了一个assembly.xml文件,这就是对应需求的打包描述文件。
我们进去看这个文件,内容如下:
<assembly>
<id>assembly</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
首先这个assembly.xml文件的id对应了其最终生成文件的classifier,这个项目最终生成的文件名为:
其次formats定义打包生成的文件格式,这里是tar.gz。因此结合id我们会得到一个名为dubbo-demo-provider-2.5.4-SNAPSHOT-assembly.tar的文件。(假设artifactId为assembly,version为2.5.4)
dependencySets用来定义选择依赖并定义最终打包到什么目录,这里我们声明的一个depenencySet默认包含所有所有依赖,
而useProjectArtifact表示将项目本身生成的构件也包含在内,最终打包至输出包内的lib路径下(由outputDirectory指定)。
fileSets允许用户通过文件或目录的粒度来控制打包。这里的第一个fileSet打包${project.build.directory}/dubbo/META-INF/assembly/bin目录下文件至输出包的bin目录下,第二个fileSet则将src/main/assembly/conf目录下的文件打包至输出包的conf目录下。
参考资料:
maven打包dubbo接口之最佳实践
http://www.bridgeli.cn/archives/236
Maven实战(九)——打包的技巧
http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package
mvndependency:tree
maven-assembly-plugin
实际的软件项目常常会有更复杂的打包需求,例如我们可能需要为客户提供一份产品的分发包,这个包不仅仅包含项目的字节码文件,
还得包含依赖以及相关脚本文件以方便客户解压后就能运行,此外分发包还得包含一些必要的文档。
我们就要搬出Maven最强大的打包插件:maven-assembly-plugin。它支持各种打包文件格式,包括zip、tar.gz、tar.bz2等等,
通过一个打包描述文件(该例中是src/main/assembly.xml),它能够帮助用户选择具体打包哪些文件集合、依赖、模块、和甚至本地仓库文件,
每个项的具体打包路径用户也能自由控制。
以Dubbo的dubbo-demo-provider为例,我们在它的pom文件中可以看到如下插件配置:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
这里的第四行我们指定了一个assembly.xml文件,这就是对应需求的打包描述文件。
我们进去看这个文件,内容如下:
<assembly>
<id>assembly</id>
<formats>
<format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/dubbo/META-INF/assembly/bin</directory>
<outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
</fileSet>
<fileSet>
<directory>src/main/assembly/conf</directory>
<outputDirectory>conf</outputDirectory>
<fileMode>0644</fileMode>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
</assembly>
首先这个assembly.xml文件的id对应了其最终生成文件的classifier,这个项目最终生成的文件名为:
其次formats定义打包生成的文件格式,这里是tar.gz。因此结合id我们会得到一个名为dubbo-demo-provider-2.5.4-SNAPSHOT-assembly.tar的文件。(假设artifactId为assembly,version为2.5.4)
dependencySets用来定义选择依赖并定义最终打包到什么目录,这里我们声明的一个depenencySet默认包含所有所有依赖,
而useProjectArtifact表示将项目本身生成的构件也包含在内,最终打包至输出包内的lib路径下(由outputDirectory指定)。
fileSets允许用户通过文件或目录的粒度来控制打包。这里的第一个fileSet打包${project.build.directory}/dubbo/META-INF/assembly/bin目录下文件至输出包的bin目录下,第二个fileSet则将src/main/assembly/conf目录下的文件打包至输出包的conf目录下。
参考资料:
maven打包dubbo接口之最佳实践
Maven实战(九)——打包的技巧
相关文章推荐
- Android 定时任务高度【schedule】与【scheduleAtFixedRate】差别
- 三层架构与MVC的区别
- RPC
- 对话框的动画以及去掉对话框的标题
- Node.js中,q在链式调用和异步调用中起到的作用
- TCP连接中TIME_WAIT连接过多
- RevealiOS使用教程之简易配置:不修改您的Xcode工程并加载Reveal
- Android MVP 模式 简单易懂的介绍方式
- Android Studio中设置阴影效果
- 【BZOJ 2599】【IOI 2011】Race 点分治
- 获取明天
- Servlet生命周期与工作原理
- 20135323符运锦----第六周:进程的描述和创建
- 缓存技术比拼:Redis与Memcached的同与不同
- Java 枚举enum 使用详解
- SAMBA
- HID高级攻击姿势:利用PowerShell脚本进行文件窃取
- 自定义控件之ScrollView回弹效果
- 使用Spring Boot创建微服务
- Linux学习30_configure: error: no acceptable C compiler found in $PATH 问题解决