方法一:项目和依赖完全分离
maven-jar-plugin 负责生成 jar 文件(jar文件中不包含如何依赖),并为 jar 文件的 manifest.mf 文件配置相关内容;maven-dependency-plugin 插件用于在构建时将项目的运行时依赖项复制到指定目录。部署项目时,生产的jar文件要和lib依赖包在同一目录下。
<build>
<!-- 生成的jar名称 -->
<finalName>${
project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- 生成的jar中不要包含pom.xml和pom.properties这两个文件 -->
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<!--这里需要修改为你的项目的主启动类-->
<mainClass>你的启动类路径</mainClass>
<!-- 是否使用唯一版本号,控制 MANIFEST.MF 中类路径的版本格式;如果不加,可能会出现依赖后面加时间戳-->
<useUniqueVersions>false</useUniqueVersions>
</manifest>
</archive>
</configuration>
</plugin>
<!--拷贝依赖的jar外面的lib目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-lib</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 指定依赖拷贝的输出目录 -->
<outputDirectory>${
project.build.directory}/lib</outputDirectory>
<!-- 不排除传递性依赖 -->
<excludeTransitive>false</excludeTransitive>
<!-- 不移除依赖版本号 -->
<stripVersion>false</stripVersion>
<!-- 仅包含 runtime 范围的依赖 -->
<includeScope>runtime</includeScope>
<!-- 排除 common 和 coo 依赖 -->
<excludeArtifactIds>common,coo</excludeArtifactIds>
</configuration>