NetBeans11.2 Maven构建的Jar文件无法连接MySQL求助
你的问题核心在于Maven依赖配置不规范,导致打包后的Jar无法找到MySQL驱动,加上NetBeans自动生成的unknown.binary临时依赖,让Maven无法正确处理依赖的传递与打包逻辑。下面是一步步的解决方案:
1. 修复POM中的依赖坐标
NetBeans自动创建的unknown.binary依赖是临时占位符,Maven无法从中央仓库识别这些依赖,必须替换为官方的Maven坐标:
替换MySQL驱动依赖
把原来的MySQL依赖替换成中央仓库的正式坐标,建议加上runtime scope(因为驱动只在运行时需要):
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> <scope>runtime</scope> </dependency>
替换AbsoluteLayout依赖
如果是Swing常用的AbsoluteLayout库,用中央仓库的正式坐标即可:
<dependency> <groupId>com.miglayout</groupId> <artifactId>miglayout-swing</artifactId> <version>5.2</version> </dependency>
如果你的AbsoluteLayout是自定义本地Jar,先执行以下命令把它安装到本地Maven仓库(替换路径和参数):
mvn install:install-file -Dfile=lib/AbsoluteLayout.jar -DgroupId=com.yourgroup -DartifactId=AbsoluteLayout -Dversion=1.0 -Dpackaging=jar
之后在POM里使用对应的groupId/artifactId/version即可。
2. 调整打包配置,确保依赖被正确包含
当前的maven-jar-plugin仅生成可执行Jar,但不会自动打包依赖,这里提供两种常用方案:
方案一:打"胖包"(把所有依赖打包到单个Jar)
添加maven-assembly-plugin到POM的build/plugins中,它会把所有依赖合并进一个Jar:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.mycompany.casys_v3.StartPage</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
方案二:保留依赖到lib目录,配置Manifest指向依赖
如果不想打胖包,用maven-dependency-plugin把依赖复制到lib目录,配合原有maven-jar-plugin的配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin>
3. 重新构建并运行Jar
执行Maven构建命令:
mvn clean package
- 方案一构建完成后,
target目录下会生成CASYS_V3-3.0-jar-with-dependencies.jar,直接运行即可:java -jar target/CASYS_V3-3.0-jar-with-dependencies.jar - 方案二构建后,
target目录下会有CASYS_V3-3.0.jar和lib文件夹,确保两者在同一目录下运行:java -jar target/CASYS_V3-3.0.jar
为什么NetBeans中运行正常?
NetBeans在IDE内运行时,会自动把项目lib目录下的所有Jar加入类路径,所以能找到MySQL驱动;但Maven默认打包不会自动处理这些本地Jar,必须通过规范的依赖配置和打包插件来确保依赖被正确包含。
内容的提问来源于stack exchange,提问作者Soumadeep De

