maven 学习之 pom.xml
上图是自己的工程目录结构。
只要在父pom中,配置 module 属性后,并且在子模块的 pom 中声明 parent 属性即可。
<parent>
<artifactId>maven-learn</artifactId>
<groupId>com.lxh.learn</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
复制代码
脚本资源
由于脚本文件不属于项目文件,所以并不需要将其打到 jar 包里面,此时就需要通过配置属性将其拷贝到输出目录,即jar包外面。
<build>
<scriptSourceDirectory>./bin/hello.sh</scriptSourceDirectory>
</build>
复制代码
打包插件
maven 提供了各种各样的插件,可以方便我们的构建工作,所以每当我们需要将项目的构建自动化时,即可以利用maven插件属性,免去重复造轮子的麻烦。插件介绍在maven官网中有详细说明,此处介绍几个自己常用的特性:
maven.apache.org/plugins/ind…
不把某些包的内容打到 jar 包里
此时需要用到 maven-jar-plugin 插件,这个插件专门用来打包。项目结构如图:
如果我不想把 exclude 目录中的类打到jar包中,则可以使用如下配置方式:
对jar包进行反编译可以看到,Test 这个类不在jar包中:
主清单属性
我们在使用 java -jar 命令执行 jar 包时,有时候会遇到错误提示:没有指定主清单属性。
这是为什么呢?
原来在每个打好的 jar 包中,都有一个叫 MANIFEST.MF 的文件。这个文件有什么用处呢?
主要是指定了一些与 jar 包相关的属性,如图所示:
而如果我们想执行一个可执行的 jar 包,则必须指定主类名称,如图所示:
怎么指定?还是通过对一个插件的配置来实现。
maven-shade-plguin,通过 maven-shade-plugin 生成一个 uber-jar,它包含所有的依赖 jar 包。在打包阶段绑定,用来创建一个 shaded jar 包,此 jar 包会把所有依赖的包打进来。
此插件提供了很多的 transforme,其中的一个ManifestResourceTransformer 用来操作 MANIFEST.MF ,并在文件中添加 entry 。
其他 transformer 介绍可以参考官网文档。
总结
了解一门技术,以前喜欢用搜索引擎,现在越来越觉得还是官网的第一手资料最靠谱,比搜索引擎更有效率。
转载于//juejin.im/post/5cc3ffbce51d456e747c53b5
还没有评论,来说两句吧...