maven安装到本地仓库、打包成库
大多数情况下,我们都在使用别人开发好的第三方jar包,然后在maven pom.xml中添加依赖,这样maven就去本地仓库中找或则中央仓库中下载。但是我们自己开发的一些常用的工具类,或则写得比较好的项目,想提供给别人使用时,这就需要使用maven把项目打包成jar包,然后你只需要把jar包和maven依赖给别人就可以了。
1、添加maven-assembly-plugin 插件
将当前jar包中依赖的jar包一并打成jar包。
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
2、建立maven坐标
<!-- 创建这个项目的组织名称(一般为组织的域名反写) -->
<groupId>com.Ehui</groupId>
<!-- 表示一个单独项目的唯一标识符 -->
<artifactId>timeseries</artifactId>
<!-- 项目的版本号 -->
<version>1.0</version>
3、项目依赖包控制
为什么需要对项目依赖包的进行控制呢?举例来说,你开发时需要做测试,你需要依赖于junit的jar,但是部署应用时并不需要它, 因为单元测试不会在生产环境上跑,也就是说最终打包的jar或者war不包含junit的jar。又如你开发web程序,你的servlet/jsp进行编译需要依赖于servlet-jsp的标准api(J2EE的jar),但是部署时也是不需要它的,因为你的应用服务器肯定有这些东西。使用maven对项目依赖包的管理非常方便,只需要在添加依赖的时候设置<scope>节点的值就可以了。
- compile: 默认的scope。编译、测试、打包全都需要。compile参与依赖传递,就是说,你的项目A依赖于B(依赖scope是compile),项目C依赖于你的项目A,那么C也就依赖于B。
- provided: 表示JDK或者容器会在Runtime时提供这些包,如jdk,或者别的地方种已经提供这些包,如servlet api。provided的东西在编译和测试时会用到,不参与传递依赖。这个依赖范围合适与项目构建成库的时候使用。
- runtime: 表示编译时不需要,但测试和运行时需要,最终打包时会包含进去。
- test: 只用于测试阶段(测试的编译和测试的运行),典型的就是junit的jar。
- system: 和provided类似,但要求jar是你的系统里已有的, 不会在repository里找,如rt.jar,tools.jar这些。
- import: 简单的说,你的项目的pom可以继承另一个项目的pom,从而继承了父项目的依赖关系,但是因为之后single inheritance的限制,所以创造了import,使得你可以“导入”或者说“继承”任何一到多个项目的依赖关系。
下面是我的项目范围依赖,spark-core_2.11<scope> 设置为provided的原因是因为我要使用这个包的项目中已经拥有spark-core_2.11这个包了,所以这里打包时可以不需要。
依赖范围图
4、maven install
安装到你的本地库中
image.png最后
当安装项目到本地仓库之后,你就可以在自己的maven仓库中看到安装好的包了。 如:在 repository/com/Ehui/ 路径下面你将会发现有一个timeseries 目录。提供给其他人使用的时候,你只需要把包与第二步中的maven坐标给别人就好了。需要注意的是,maven寻找依赖包的时候就是根据坐标去找的,所以到时候给别人的时候叮嘱一下,千万不能放错目录。
感恩之心,珍惜当下。人生最重要的时刻就是现在。