2014-09-08 4 views
2

Я пытаюсь использовать Maven Shade для сборки Uber Jar. Все работает, он строит делает uber jar, который я запускаю из файла BAT: материал без базы данных работает нормально, но по какой-то причине MySQL-Connector не найден в пути к классам.Maven-Shade MySQL classnotfound

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= 

The Maven плагин находятся в моем родительском П, и зависимости в дочерних POMS, (хотя я пытался ставить плагин в модуле POM DB тоже, но безрезультатно.)

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

При поиске решения я добавляю -cp в загружаемую банку в командной строке, но я не могу получить найденный коннектор! Вся программа работает в моей среде IDE, никаких проблем.

Я прочитал пару других сообщений с участием Shade, из которых я так и не нашел достаточно ясного (достаточно ясно для меня (без комментариев))! Ответы обычно оговариваются с помощью плагина сборки. Тем не менее, я хотел бы придерживаться 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> 
+0

Никогда не использовался оттенок, только монтажный плагин, но, пожалуйста, проверьте, есть ли у jar пакет mysql. Если это не так, как вы знаете, это проблема конфигурации плагина. – dimoniy

+0

@dimoniy Почему бы не использовать maven-shade-plugin? Что случилось? – khmarbaise

+0

У меня такая же проблема. И это происходит как с сборкой, так и с теневым плагином. В моем проекте реализовано только 1 java.sql.Driver. META-INF/services/java.sql.Driver существует и является правильным. Если я добавлю Class.forName («com.mysql.jdbc.Driver») в качестве первой строки моей основной точки входа, нет исключения, но она не устраняет проблему . – Gert

ответ

2

Проверьте, если ваш затененных JAR содержит ресурс META-INF/services/java.sql.Driver с содержанием

com.mysql.jdbc.Driver 

Если это не так, что может быть какой-либо другой драйвер JDBC в ваших зависимостей, замененных ресурс MySQL.

+0

Я, кажется, исправил проблему, но я все еще работаю над тем, как! У меня есть два тега , один для клиента и один для сервера. Я заменил их порядок и установил false. Однако я не вижу, как это повлияло на что-то важное. Интересно, что в каталоге/services/jar находится java.sql.Driver. Но в любом случае, похоже, сейчас он работает. Спасибо за ваш ответ. Какой замечательный плагин! –

+0

Еще одна вещь: на этой неделе у нас была проблема. Думал, что я бы поднял голову. У меня была зависимость от SQL Server и MySQL jars; для нашего проекта это либо или ситуация: нам не нужно ни в одной клиентской сборке. У двух из них возникла проблема: я не получал ошибок, обнаруженных водителем: только одна банка в финальном оттенке исправила проблему. –

+0

Это сработало для меня. У меня были как H2, так и драйверы postgres в качестве зависимостей. Удаление H2 разрешило работать драйверу postgres. Java.sql.Файл драйвера был перезаписан с файлом H2. –