我正在尝试使用Maven Shade构建一个Uber Jar。一切正常,它的构建使uber jar(我从BAT文件运行):非数据库的东西运行正常,但是由于某种原因,在类路径中找不到MySQL-Connector。

2014-09-08 17:14:00 DEBUG DatabaseConnectionFactory:47 - Creating a new database connection
2014-09-08 17:14:00 ERROR DatabaseConnectionFactory:53 - java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/myDB?user=root&password=


Maven插件位于我的父POM中,而依赖项位于子poms中(尽管我也尝试将插件也放入DB模块POM中,但无济于事。)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
</dependency>


在寻求解决方案时,我在命令行上将-cp添加到了下载的jar中,但是找不到连接器!整个程序可以在我的IDE中正常运行,没有问题。

我已经阅读了有关Shade的其他几篇文章,从中我从来没有找到一个足够清晰的答案(对我来说足够清晰(请无评论)!)答案通常是使用Assembly plugin规定的。但是,我想坚持使用Shade,因为它使一切变得简单。

我在下面添加了一个削减的POM,希望有人能帮助我!

非常感谢!

               <execution>
                    <id>myClient</id>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <outputFile>C:\Dev\myJar.jar</outputFile>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>myapp.ClientStart</mainClass>
                            </transformer>
                        </transformers>

                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                    <exclude>properties/**</exclude>
                                    <exclude>images/**</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>

最佳答案

检查着色的JAR是否包含包含内容的资源META-INF/services/java.sql.Driver

com.mysql.jdbc.Driver


如果不是,则您的依赖项中可能还有其他JDBC驱动程序取代了MySQL资源。

关于java - Maven-Shade MySQL类未找到,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25728855/

10-11 22:03