2016-08-27 2 views
0

neo4j-jdbc-driver v3.0을 사용하여 Neo4j 2.2.10 서버에 연결하려고합니다. IDE 내에서 아무런 문제없이 연결할 수 있지만 Jar 파일에서 동일한 작업을 시도 할 때 의존성을 사용할 수없는 것처럼 적절한 드라이버를 찾지 못했습니다.Maven이 Jar 파일의 종속성을 포함하지 않음

<dependencies>  
    <dependency> 
    <groupId>org.neo4j</groupId> 
    <artifactId>neo4j-jdbc-driver</artifactId> 
    <version>3.0</version> 
    </dependency> 
</dependencies> 

<build>  
    <plugins> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
      <goal>single</goal> 
      </goals> 
     </execution> 
     </executions> 
     <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     </configuration> 
    </plugin> 
    </plugins> 
</build> 

내가 다른 포럼에 그래서 플러그인에서 수행되는 곳 즉 메이븐으로 의존성을 포함 들여다 :

java.sql.SQLException: No suitable driver found for jdbc:neo4j:http://localhost 
    at java.sql.DriverManager.getConnection(DriverManager.java:689) 
    at java.sql.DriverManager.getConnection(DriverManager.java:270) 
    .... 

은 여기 내 내 pom.xml 파일의 관련 부분이다. 그러나, 나는 그것이 오류에 따라 종속성을 포함한다고 생각하지 않습니다.

이전에, 내가 사용했다 : 나는 아무 문제가있는 항아리에서 볼트를 통해 3.0.3의 Neo4j 서버와 상호 작용을 할 수 있었다

<dependency> 
    <groupId>org.neo4j.driver</groupId> 
    <artifactId>neo4j-java-driver</artifactId> 
    <version>1.0.4</version> 
</dependency> 

.

내가 뭘 잘못하고 있니?

어떤 조언을 해주셔서 감사합니다! 드라이버가 결과 유물에 포함되어있는 경우 자신을 확인할 수 있습니다

+0

maven (mave install)을 사용하여 IDE에서 jar 파일을 pakaging하고 있습니까? – Sakalya

+0

maven install을 사용하여 IDE에서 maven plugin을 통해. – macourtney7

+0

네, 그거하니? – Sakalya

답변

1

(이름이다 랬 assembly.jar) :하지만 그것은 아마도

jar tf target/assembly.jar | fgrep jdbc 

.

나는이 문제가 드라이버가 자동으로 서비스 공급자 인터페이스 (SPI)를 사용하여 META-INF/services/java.sql.Driver에 클래스를 나열함으로써 등록되었다고 생각한다. 그러나 어셈블리 플러그인은 어셈블리 항아리를 분해하고 uber-jar (셰이드 플러그인과 마찬가지로)를 만드는 대신 어셈블리 항아리 안에 종속 항아리를 패키지하기 때문에 SPI 파일은 검색되지 않습니다. 예를 들어 this blog post을 참조하십시오.

ServicesResourceTransformer으로 구성된 음영 플러그인을 사용해 보시기 바랍니다.


업데이트

SPI의 메커니즘은 사용자의 컨텍스트 (컨테이너 응용 프로그램에서 플러그인으로로드 항아리)에서 작동하지 않는 경우 코드에있는 장소가 있다면, 당신은 드라이버를 직접 등록 할 수 있습니다 드라이버가 사용되기 전에 (예를 들어 Plugin.onLoad()을 구현하여 플러그인 초기화 서비스를 호출하기 전에) 호출됩니다. 드라이버의 인스턴스를 생성하면 자체적으로 등록됩니다.

try { 
    new org.neo4j.jdbc.http.HttpDriver(); 
} catch (SQLException e) { 
    logger.error("Could not load HttpDriver for Neo4j", e); 
} 
+0

안녕하세요, 나는 당신의 제안을 약간의 성공에 따라 따라갔습니다. 기본 테스트 Jar에서'ManifestResourceTransformer'를 사용할 때 작동하지만 독립 실행 형 Jar 파일을 만들려고하지는 않습니다. 내 프로젝트에 필요한 것과 같은 방식으로 클래스를 확장하고 실행 파일로 jar를 실행하려고하면 '기본 클래스를로드하거나 찾을 수 없습니다 ...'오류가 발생합니다. 나는'ManifestResourceTransformer' 대신에'ServicesResourceTransformer'를 시도했지만 확장 된 후에는 더 이상 실행하지 않습니다. 나는 또한 플러그인으로 시도했는데 (여전히 성취하려고 시도하고있다.) JDBC를 찾을 수 없다. – macourtney7

+0

독립 실행 형 병이 아닌 경우 실제로 어셈블리 또는 음영 플러그인을 사용하여 단일 이슈를 생성해야합니까? (명령 행에서 클래스 패스 인수 인'WEB-INF/lib', 무엇이든간에) 일반적인 방법으로 의존성을 사용할 수는 없습니까?이 모든 혼란을 피할 수 있을까요? 어쨌든, 드라이버가 작동하려면, 생성 된 jar에'META-INF/services/java.sql.Driver' 파일이 있어야합니다 :'jar tf target/assembly.jar | fgrep META-INF/services/java.sql.Driver' 파일에 있습니다. –

+0

서버 (익숙한 경우 Spigot)에서 실행되는 플러그인을 만들려고하므로 단지 jar 파일을 플러그인 폴더에 넣고 서버를 부팅하십시오 .'jar tf target/assembly.jar | fgrep META-INF/services/java.sql.Driver'는'META-INF/services/java.sql.Driver'를 리턴합니다. – macourtney7

관련 문제