IntelliJ打包Jar提示主类找不到/无法加载的问题排查
解决Java项目Jar打包与运行的三类常见问题
我来帮你一步步捋清楚你遇到的这几个Jar打包和运行的坑,都是Java开发者常踩的点,咱们逐个解决:
一、IntelliJ打包后提示「无法找到或加载主类view.BookWindow」
这个问题大概率是MANIFEST.MF的配置或Jar目录结构出了问题,你可以按以下步骤排查:
- 检查主类全限定名:确认MANIFEST.MF里的
Main-Class字段是view.BookWindow(Java类名区分大小写,别写错) - 不要手动指定MANIFEST路径:你之前把MANIFEST.MF放到
src/main/resources是没必要的,让IntelliJ在打包向导里自动生成即可——手动放置的文件可能没有被正确合并到Jar根目录的META-INF下 - 验证Jar内的目录结构:反编译Jar后,确保
view/BookWindow.class确实存在,且路径是Jar根目录直接下的view文件夹,不是嵌套在其他目录(比如classes/view/) - 重新走IntelliJ打包流程:在「从带依赖的模块创建Jar」向导里,一定要精准选择
view.BookWindow作为主类,别选错其他类
二、移动文件后Maven编译报错:找不到org.apache.commons.codec.binary.Base64
这个是依赖缺失的问题,移动文件后Maven的依赖映射可能出了问题,解决方法很直接:
- 在pom.xml中添加commons-codec依赖:把这段代码加到你的依赖列表里:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.15</version> <!-- 用最新稳定版即可,也可以用你项目需要的版本 --> </dependency>
- 清理Maven缓存并重新编译:先执行
mvn clean清除旧的编译文件,再运行mvn install,避免缓存导致的依赖未加载问题 - 刷新IntelliJ的Maven依赖:点击右侧Maven面板的「刷新」按钮,确保IntelliJ已经同步了pom.xml的依赖变更
三、Maven打包的Jar运行时找不到Flamingo类(已存在于lib目录)
默认的Maven打包只会生成你的项目代码Jar,不会自动处理依赖类的加载,即使你把依赖Jar放到lib目录、配置了MANIFEST.MF,也容易因为Class-Path配置不全出问题,推荐用Maven插件来解决:
方案1:用maven-assembly-plugin生成带所有依赖的可执行Jar
这个插件会把你的代码和所有依赖的类打包到一个Jar里,或者生成带lib目录的结构并自动配置Class-Path,配置如下:
<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <!-- 选择生成带依赖的Jar --> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <!-- 指定主类 --> <archive> <manifest> <mainClass>view.BookWindow</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
配置好后执行mvn clean package,会生成一个带-jar-with-dependencies后缀的Jar,直接运行java -jar 这个Jar文件名.jar就不会缺依赖了。
方案2:用maven-shade-plugin合并所有类到一个Jar
如果你不想带lib目录,这个插件会把所有依赖的类合并到你的项目Jar里,配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>view.BookWindow</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行mvn clean package后,生成的Jar就是包含所有依赖的可执行Jar,直接运行即可。
内容的提问来源于stack exchange,提问作者lolveley
相关产品推荐
相关产品推荐

