介绍
介绍
福哥打算做一个tfjava项目,把通用的公共库整合到一起,打包成jar库包给其他项目使用。现在把操作过程记录下来,分享给大家~~
打包
打包可以通过IDE工具直接生成,也可以通过Maven命令生成,下面福哥将两种方法都介绍给大家
打包插件
在pom.xml里将默认的spring-boot-maven-plugin插件改成maven-compiler-plugin插件
org.apache.maven.plugins
maven-compiler-plugin
库包信息
在pom.xml里的project节点下面设置 groupId,artifactId,version 信息net.tongfu
tfjava
1.0.1.BETA
IDE生成
生成jar库包到本地的maven库里,点击IDEA右侧的Maven按钮,在Maven窗口里点开 [项目名称] > Lifecycle > install,双击这个“install”开始生成jar库包
一切顺利的话,jar库包会被生成到项目的 target 下面,使用这个jar库包除了jar文件还需要项目的pom.xml文件。
Maven生成
如果需要自动化生成jar库包可以使用maven命令行生成,可以通过install直接生成jar包文件并且自动部署到本地maven库里,也可以先通过package生成jar包然后通过install:install-file导入本地maven库,导入本地maven库需要提供包信息,包括groupId、artifactId、version和jar包文件路径
自动部署
自动生成jar包文件,自动导入本地maven库mvn clean install -Dmaven.test.skip=true
手动部署
生成jar包文件mvn clean package -Dmaven.test.skip=true
导入jar包到本地maven库mvn install:install-file -DgroupId=[groupId] -DartifactId=[artifactId] -Dversion=[version] -Dfile=[jar包完整路径]
Jar包位置
生成jar包在项目根目录下面的 target 文件夹下
引用
引用生成出来的jar包有三种方法,将jar包导入本地maven库使用,将jar包导入远程maven库使用,将jar包复制到项目下面包含使用,福哥分别将这三种方法介绍给大家
本地Maven库
如果是在打包项目所在的电脑上开发新项目,那么就可以在新项目里直接使用这个库包里面的对象,因为我们已经将jar包导入到了本地maven库了
远程Maven库
如果是在其他电脑上开发新项目,那么就需要把jar文件和pom.xml文件按要求复制到远程电脑上,然后通过mvn命令将jar库包导入的maven库里
复制target下面的生成的jar包到其他电脑上,在其他电脑上运行如下命令导入jar包到本地maven库mvn install:install-file -DgroupId=net.tongfu -DartifactId=tfjava -Dversion=1.0.1.BETA -Dpackaging=jar -Dfile=[jar包完整路径]
项目包含
除了将jar包导入到本地maven库之外,还可以把jar包复制到项目下面,通过包含的方式引入到项目里面。这种方式无需对本地maven库进行任何调整,推荐使用这种方法
在pom.xml里面将tfjava的依赖项设置改动一下,增加systemPath参数指定jar包路径
net.tongfu
tfjava
1.0.1.BETA
system
${basedir}/lib/tfjava-1.0.1.BETA.jar
在项目根目录增加 lib 文件夹,复制tfjava的jar包到这个文件夹下面,然后再编译项目就可以通过了
带依赖项打包
如果我们开发的jar包依赖其他jar包,直接使用上面的方法打包后在远程电脑上使用的时候,如果远程电脑上没有依赖jar包就会出现问题
要解决这个问题需要在打包的时候将依赖项信息添加到生成的jar包里面,在远程电脑上导入的时候自动下载它们,才能正常使用
可用缩使用assembly插件打包依赖jar包,或者通过maven命令打包依赖jar包(也是使用assembly插件)
Assembly插件
在pom.xml添加assembly插件,提供它来解决依赖项的问题
org.apache.maven.plugins
maven-assembly-plugin
jar-with-dependencies
Maven生成
使用maven命令行生成包含依赖项的jar包,命令基本和不包含依赖项的打包方式一样,就是一个区别,把package或者install换成assembly:single
打包
使用assembly:single打包mvn assembly:single -Dmaven.test.skip=true
生成
可以看到在target下面生成了两个jar包,一个tfjava-1.0.1.BETA.jar不包括,另一个tfjava-1.0.1.BETA-jar-with-dependencies.jar包括全部依赖项的jar包
排除依赖项打包
如果有一些jar包仅用于测试,或者属于公共jar包,在打包的时候不想打包到项目里,可以通过scope设置为不需要打包,从而在生成的jar包排除这些jar包依赖项
scope
在dependency里通过scope来指明这个依赖性是使用范围,可选择说明如下:compile:(默认)依赖性会被打包到生成的项目里
provided:期待JDK、容器或使用者会提供这个依赖
runtime:只在运行时使用,如JDBC驱动,适用运行和测试阶段
test:只在测试时使用,用于编译和运行测试代码,不会被打包到生成的项目里
system:需要显式提供包含依赖的jar,maven不会在repository中查找它
原则
给dependency设置scope有下面几个原则,可以参考系统级别的jar包可以使用provided,一般情况下使用者会满足这些jar包环境