如何使用Maven将lib目录下的jar包引入主jar包实现轻量化
步骤1:调整依赖作用域
将你需要外置的Hikari、H2等依赖的scope设置为provided,Maven打包时就不会将这些依赖打入主jar包,实现主包轻量化。配置示例如下:
<dependencies> <!-- Hikari连接池 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>替换为你的实际使用版本</version> <scope>provided</scope> </dependency> <!-- H2数据库 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>替换为你的实际使用版本</version> <scope>provided</scope> </dependency> <!-- 其余需要内置在主jar的依赖无需修改scope配置 --> </dependencies>
步骤2:配置主jar包的类路径与启动类
使用maven-jar-plugin插件配置主jar的启动类,同时自动将外置依赖的类路径前缀设置为lib/,对应你存放外置jar的目录:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.2</version> <configuration> <archive> <manifest> <!-- 替换为你项目主启动类的全限定名,例如com.example.Application --> <mainClass>你的主启动类全限定名</mainClass> <addClasspath>true</addClasspath> <!-- 指定外置依赖的存放目录前缀 --> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin> </plugins> </build>
步骤3:自动导出外置依赖(可选)
如果不想手动收集外置jar包,可以新增maven-dependency-plugin插件,执行打包命令时自动将所有provided作用域的依赖导出到lib目录:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>copy-provided-deps</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <includeScope>provided</includeScope> </configuration> </execution> </executions> </plugin>
步骤4:运行主jar包
完成配置后执行mvn package打包,将target目录下生成的主jar包和lib目录放在同一级目录,结构如下:
. ├── Main.jar └── lib ├── HikariCP-xxx.jar └── h2-xxx.jar
直接执行以下命令即可正常运行:
- Linux/macOS系统:
java -jar Main.jar - 如需手动指定类路径运行:
- Linux/macOS:
java -cp "Main.jar:lib/*" 你的主启动类全限定名 - Windows:
java -cp "Main.jar;lib/*" 你的主启动类全限定名
- Linux/macOS:
注意:lib目录下存放的外置jar版本需要和pom.xml中依赖的版本完全一致,避免出现类找不到或版本冲突问题。
内容的提问来源于stack exchange,提问作者korallo
相关产品推荐
相关产品推荐

