繁体   English   中英

Maven不包括Jar文件中的依赖项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM