使用Maven和Java的ClassNotFoundException

时间:2014-03-08 16:14:34

标签: java mysql eclipse maven jar

我制作了一个小桌面应用程序,我使用MySQL连接器来处理数据库。以前我已将MySQL连接器添加到类路径中。

之后,我添加了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'文件夹,而不是类型{{1 (双击该文件打开应用程序)。

谢谢, OverSpeed301

2 个答案:

答案 0 :(得分:0)

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版本。

在我的例子中,我制作了以下内容:

  1. 目标/我的应用内-1.0-SNAPSHOT.jar
  2. 目标/我的应用内-1.0-快照罐与 - dependencies.jar
  3. 有关详细信息,请参阅Maven assembly plugin documentation

答案 1 :(得分:0)

或者,您也可以使用遮阳插头:

           <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,但上面示例中显示的那些依赖项除外(org.slf4j *)。请注意,这将使用包含所有依赖项的胖jar替换常规jar。如果你需要两者,你应该使用maven-assembly