我做了一个小桌面应用程序,然后使用MySQL连接器与数据库一起使用。以前,我已将MySQL连接器添加到ClassPath。
之后,我添加了MySQL连接器依赖性:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
构建是成功的,但是当我从命令行启动.jar文件时,出现此错误:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
当我使用java -cp mysql-connector-java-5.1.29.jar -jar NameOfJar.jar
启动程序时,没有问题,程序正常启动,但是理想情况下,我想"打包"连接器或具有'lib'文件夹,而不是type java -cp mysql [...]
(双击文件上打开应用程序)。
谢谢超速301
另外,您也可以使用Shade插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<artifactSet>
<excludes>
<exclude>org.slf4j*</exclude>
</excludes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
它创建一个带有所有依赖性的额外jar,除了您明确排除的jar(org.slf4j*)所示。请注意,这将用包含所有依赖性的胖罐子代替普通的罐子。如果您两者都需要,则应使用Maven-Asembly
maven带来了支持生产具有所有必要依赖性的JAR的支持,但您需要正确配置汇编插件。
如果将以下内容添加到pom.xml的构建部分
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.3</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
运行mvn package
时,您应该获得包装所有依赖项的JAR版本。
在我的示例中,我产生了以下内容:
- target/my-app-1.0-snapshot.jar
- target/my-app-1.0-snapshot-jar-with-with依赖性
有关更多详细信息,请参见Maven Assembly插件文档。