[英]Maven not including dependencies in Jar file
我正在尝试使用neo4j-jdbc-driver v3.0连接到Neo4j 2.2.10服务器。 我能够在IDE中进行连接而没有任何问题,但是当我尝试从Jar文件中进行相同操作时,我得到了一个找不到合适的驱动程序的异常,好像该依赖项不可用。
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的相关部分:
<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>
我在论坛上的其他地方研究了与Maven的依赖关系,因此就是从那里获取插件的。 但是,我不认为这包括基于错误的依赖关系。
以前,我使用的是:
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>1.0.4</version>
</dependency>
我可以通过Jar上的螺栓与v3.0.3 Neo4j服务器进行交互,没有任何问题。
我究竟做错了什么?
感谢您的任何建议!
您可以验证自己驱动程序是否包含在生成的工件中(假设其名称为assembly.jar):
jar tf target/assembly.jar | fgrep jdbc
可能是这样。
我认为问题出在以下事实:通过列出META-INF/services/java.sql.Driver
的类,使用服务提供者接口(SPI)自动注册了驱动程序。 但是,由于程序集插件将依赖项jar打包在了程序集jar中,而不是将它们分解并创建一个uber-jar(如shade插件可以),因此不会扫描SPI文件。 例如,请参阅此博客文章 。
我建议您改用配置有ServicesResourceTransformer
的阴影插件。
更新资料
如果SPI机制在您的上下文中不起作用(容器应用程序将其作为插件加载到插件中),则您可以自己注册驱动程序,前提是您知道在使用该驱动程序之前会调用该代码中的某个位置(某些初始化服务)对于插件,例如,可以通过实现Plugin.onLoad()
?):仅创建驱动程序的实例,它将自行注册。
try {
new org.neo4j.jdbc.http.HttpDriver();
} catch (SQLException e) {
logger.error("Could not load HttpDriver for Neo4j", e);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.