1.打包方式
首先推荐用mvn clean package 打包,最好不要依赖开发工具,可以绕开一些坑,指令行是最稳妥的。
package/install/deploy 三者的区别在于:只打包/打包并布署到本地maven仓库/布署到本地maven仓库和远程maven私服仓库
ps: 可以用 -DskipTests 选项跳过测试
2.引入外部jar包
我的项目中遇到的问题主要就是这个,因为涉及多方通讯,项目中引用了其他公司提供的第三方jar包,从而导致了一些问题
2.1方式一:dependency 本地jar包
在pom中增加依赖第三方jar
<dependency>
<groupId>com.hope.cloud</groupId> <!--自定义-->
<artifactId>cloud</artifactId> <!--自定义-->
<version>1.0</version> <!--自定义-->
<scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
<systemPath>${basedir}/lib/cloud.jar</systemPath> <!--项目根目录下的lib文件夹下-->
</dependency>
这样的方式虽然最简单,但是还是会出现一个问题:maven没有将本地的jar也打到生成的包中(并且运行还不报错!)
ps:通常情况下的ClassNotFound异常,如果是因为缺少包导致的
解决方式有两种:
#第一种解决方式
在pom的build节点上增加下列代码
<resources>
<resource>
<directory>${project.basedir}/lib</directory>
<targetPath>BOOT-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<targetPath>BOOT-INF/classes/</targetPath>
</resource>
</resources>
#第二种解决方式
在pom中给spring boot的打包插件设置一下includeSystemScope参数即可
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
2.2方式二:编译阶段指定外部lib
在编译插件中使用<extdirs>标签指定外部lib
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArguments>
<extdirs>lib</extdirs><!--指定外部lib-->
</compilerArguments>
</configuration>
</plugin>
2.3方式三:将外部jar打入本地maven仓库
cmd 进入jar包所在路径,执行以下命令(下面这个只是例子,你需要填写自己jar包对应的groupId、artifactId、version)
mvn install:install-file -Dfile=cloud.jar -DgroupId=com.hope.cloud -DartifactId=cloud -Dversion=1.0 -Dpackaging=jar
然后正常引入依赖
<dependency>
<groupId>com.hope.cloud</groupId>
<artifactId>cloud</artifactId>
<version>1.0</version>
</dependency>
参考:https://blog.csdn.net/pltuyuhong/article/details/50954017