2014-09-08 3 views
2

Maven Shade를 사용하여 Uber Jar를 빌드하려고합니다. 모든 것이 작동하고 있습니다. 빌드를하면 BAT 파일에서 실행중인 uber 항아리가 만들어집니다. 비 데이터베이스 작업은 정상적으로 실행되지만 어떤 이유로 MySQL-Connector가 클래스 경로에서 발견되지 않습니다. Maven-Shade MySQL 클래스 없음

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= 

받는다는 플러그인

내 부모 POM에있는, 그리고 종속성, 아이 리딩에 (내가 아무 소용이, 너무 DB 모듈 POM의 플러그인을 넣어 해봤지만.)

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

해결책을 찾으면서 명령 줄에서 다운로드 한 jar에 -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

동일한 문제가 있습니다. 어셈블리와 셰이드 플러그인 모두에서 발생합니다. 내 프로젝트에는 java.sql.Driver 구현이 1 개만 있습니다. META-INF/services/java.sql.Driver가 존재하고 정확합니다. 내 기본 진입 점의 첫 번째 줄에 Class.forName ("com.mysql.jdbc.Driver")을 추가하면 예외는 없지만 문제는 해결되지 않습니다. – Gert

답변

2

확인은 음영 JAR는 내용

com.mysql.jdbc.Driver 

는, MySQL의 자원을 대체 의존성에서 다른 JDBC 드라이버가있을 수 있습니다하지 않는 경우

의 자원 META-INF/services/java.sql.Driver 포함 된 경우.

+0

나는 문제를 해결 한 것 같지만, 나는 아직도 어떻게 일하고 있는가! 두 개의 태그가 있습니다. 하나는 클라이언트 용이고 다른 하나는 서버 용입니다. 나는이 순서를 바꾸고 false을 설정했다. 그러나 이것이 어떤 영향을 미치는지 나는 알 수 없다. 흥미롭게도 jar의/services/디렉토리에있는 것이 java.sql.Driver입니다. 하지만 어쨌든 지금은 효과가있는 것 같습니다. 답변 주셔서 감사합니다. 그것은 얼마나 위대한 플러그인인가! –

+0

다른 한 가지 : 이번 주에 문제가있었습니다. 내가 머리를 줄 줄 알았어. 나는 SQL Server와 MySQL jar에 의존했다. 우리 프로젝트의 경우 그것은 하나의 상황이거나 둘 중 하나 일 수 있습니다. 두 개가 문제를 만들었습니다. 드라이버를 찾지 못했습니다. 최종 음영에 항아리 한 개만 있으면 문제가 해결되었습니다. –

+0

이것은 나를 위해 일했습니다. 나는 의존성으로 H2 드라이버와 포스트그레스 드라이버를 모두 가지고있었습니다. H2를 제거하면 postgres 드라이버가 작동 할 수있었습니다. java.sql.드라이버 파일을 H2의 파일로 덮어 썼습니다. –

관련 문제