Maven构建可执行jar包:包含依赖及问题解决

版权申诉
6 下载量 127 浏览量 更新于2024-09-11 收藏 62KB PDF 举报
"Maven如何构建可执行的jar包(包含依赖jar包)" 在Java开发中,Maven是一个强大的项目管理工具,可以帮助开发者自动化构建、管理和部署项目。当我们需要创建一个可执行的jar包,其中包含了所有依赖的第三方库时,Maven提供了相应的插件来实现这一目标。本文将详细介绍如何使用Maven的maven-assembly-plugin或maven-shade-plugin来构建这样的jar包。 首先,我们的目标是构建一个独立的jar文件,这个jar文件不仅包含我们自己的源代码,还应该包含所有必要的依赖库,以便可以直接通过`java -jar`命令运行。在描述中提到,这个过程可能会遇到一些问题,如配置不生效、运行异常等,但通过正确的方法和配置,这些问题都可以得到解决。 1. maven-assembly-plugin:这是Maven的一个插件,用于创建项目的归档文件,如jar、tar.gz等。要构建包含依赖的可执行jar,我们需要在pom.xml中添加对应的配置: ```xml <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.delon.main.Test</mainClass> </manifest> </archive> <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> </plugins> </build> ``` 在这个配置中,`mainClass`属性指定了程序的主类,`jar-with-dependencies`描述符会把所有依赖打包进jar。 2. 遇到的问题及解决方法: - 问题1:修改pom.xml后不生效。这通常是因为IDEA没有自动更新项目配置。可以通过点击右下角的"import changes"或启用自动导入功能解决。 - 问题2:使用`java -jar`运行报`NoClassDefFoundError`。这可能是因为指定的`mainClass`不正确,应确保指定的类名与包含`main`方法的类完全匹配,包括全限定名。 - 问题3:运行时报缺少依赖错误。这是因为jar包中并未包含所有必需的依赖。使用上述maven-assembly-plugin的配置可以解决这个问题。 3. 构建步骤: - 编写包含`main`方法的可执行类。 - 在命令行中执行`mvn package`,这会根据pom.xml中的配置打包项目。 - 使用`java -jar test.jar`来运行生成的jar包。 除了maven-assembly-plugin,还可以使用maven-shade-plugin,它提供了更多自定义选项,例如重命名和重组依赖包,以避免类冲突。配置方法类似,只是将插件替换为maven-shade-plugin,并设置相应的配置项。 通过正确配置Maven的插件,我们可以方便地构建包含所有依赖的可执行jar包,从而简化项目的部署和运行流程。在实际操作中,遇到问题要善于查阅文档和在线资源,解决问题并积累经验。