【问题标题】:Java does not find/recognize ojdbc6.jar included in Maven packageJava 找不到/识别 Maven 包中包含的 ojdbc6.jar
【发布时间】:2023-03-29 20:10:01
【问题描述】:

我有一个使用 ojdbc6.jar 连接到 Oracle 的独立 Java 应用程序。 使用 Maven 编译应用程序很好,在 Eclipse 中调试项目也很好。

但是,使用 Maven 包捆绑依赖然后运行应用程序 从命令行我得到异常: java.sql.SQLException: 找不到适合 jdbc:oracle:thin:@::

的驱动程序

包含依赖项的 jar 存在,并且该工件的正确路径已在类路径中正确指定。在检查依赖 jar 文件后,我可以看到包含正确文件的 Oracle 文件夹,因此显然包装中包含了驱动程序,但 Java 找不到它们。添加直接指向文件 ojdbc6.jar 的类路径条目可以让程序正常运行,因此任何其他依赖项都没有问题。所以看起来问题出在包装上。

有人遇到过这样的事情吗?

这是 POM:

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>MyGroup</groupId>
    <artifactId>MyArtifact</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.jcr</groupId>
            <artifactId>jcr</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jackrabbit</groupId>
            <artifactId>jackrabbit-core</artifactId>
            <version>2.2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.5.11</version>
        </dependency>
        <dependency>
            <groupId>diss</groupId>
            <artifactId>diss-eai-interface</artifactId>
            <version>4.3</version>
        </dependency>
        <dependency>
            <groupId>diss</groupId>
            <artifactId>diss-jvs-datadictionary</artifactId>
            <version>4.3</version>
        </dependency>
        <dependency>
            <groupId>diss</groupId>
            <artifactId>diss-cats-model</artifactId>
            <version>4.3</version>
        </dependency>
        <dependency>
            <groupId>diss</groupId>
            <artifactId>diss-common-ui</artifactId>
            <version>4.3</version>
        </dependency>
        <dependency>
            <groupId>org.primefaces</groupId>
            <artifactId>primefaces</artifactId>
            <version>3.5.28</version>
        </dependency>
        <dependency>
            <groupId>diss</groupId>
            <artifactId>diss-eai-business</artifactId>
            <version>4.3</version>
        </dependency>
        <dependency>
            <groupId>weblogic</groupId>
            <artifactId>wlfullclient</artifactId>
            <version>10.3.6</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.4.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>commonj.sdo</artifactId>
                    <groupId>commonj.sdo</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>catalina</artifactId>
            <version>6.0.18</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>diss</groupId>
            <artifactId>diss-jvs-model</artifactId>
            <version>4.3</version>
        </dependency>



        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.0.2</version>
        </dependency>

        <dependency>
            <groupId>aspose</groupId>
            <artifactId>word</artifactId>
            <version>14.1.0</version>
        </dependency>


      </dependencies>

    <build>



    <plugins>


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <downloadSources>true</downloadSources>
          <downloadJavadocs>false</downloadJavadocs>
        </configuration>
      </plugin>


      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>


            <!-- prevent Invalid signature exception -->
            <configuration>
              <filters>
                <filter>
                  <artifact>*:*</artifact>
                    <excludes>
                      <exclude>META-INF/*.SF</exclude>
                      <exclude>META-INF/*.DSA</exclude>
                      <exclude>META-INF/*.RSA</exclude>
                    </excludes>
                </filter>
              </filters>
            </configuration>

          </execution>
        </executions>
        <configuration>
          <finalName>uber-${project.artifactId}-${project.version}</finalName>
        </configuration>
      </plugin>


    </plugins>


    </build>




    <repositories>


        <repository>
            <id>EclipseLink Repo</id>
            <url>http://download.eclipse.org/rt/eclipselink/maven.repo</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <repository>
            <id>Apache-Maven</id>
            <layout>default</layout>
            <url>https://repository.apache.org/content/repositories/releases/</url>
        </repository>

        <repository>
            <id>jboss-public-repository-group</id>
            <name>JBoss Public Maven Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public/</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </snapshots>
        </repository>

    </repositories>


</project>

【问题讨论】:

  • pom 文件和目录布局在这种情况下可能会有所帮助。
  • 除了 ojdbc6.jar 不在 Maven 存储库中这一事实之外,我还想知道您实际上是如何打包/启动应用程序的。因为通常(不使用着色器或启动器时)依赖项必须手动指定(在 java 类路径中)。
  • define "Maven package" 这不是标准的 maven 行话。如果没有pom.xml 的相关位和~/.m2/repository 目录中的内容列表,这将被关闭。
  • 谢谢,eckes...正如原帖中提到的,我已经拥有 ojdbc 文件,并且它 >> 被打包在调用时创建的 jar 中Maven 包。
  • @oldJavaDude 请发布您的 pom.xml 文件。

标签: java maven


【解决方案1】:

由于许可协议,无法从公共存储库下载 Oracle ojdbc jar,必须使用 maven install(更多信息 here)在本地存储库中手动安装。如果您使用 nexus,则可以使用其管理布局上传。

oracle jdbc jar可以从here下载

【讨论】:

  • 感谢 fmodos -- 正如原帖中提到的那样,我已经拥有 ojdbc jar 并将其安装在我的本地存储库中。
  • 不,问题在于您对 Maven 项目的配置和/或您启动应用程序的方式(如果它不在应用服务器中);因为在我的多个需要它的 Maven 托管项目中,我对相同的 .jar 没有任何问题。
【解决方案2】:

您没有习惯性地使用 Maven,这是您的大部分问题:

没有使用 Maven 的默认行为来构建和打包 .jar 文件。您显然无缘无故地使用了assembly 插件,而且您在此之上还错误地使用了它。它没有构建 Maven 默认构建的内容。

惯用语:

  1. 定义&lt;packaging&gt;jar&lt;/packaging&gt; 并去掉assembly 插件。

  2. 您应该使用shade plugin 来制作一个超级jar,并使用building a custom manifest 使用默认的打包系统来定义入口点。

  3. 资源应该放在/src/main/resources 中而不是源代码中。如果以这种方式完成,则无需配置任何内容,因为这是非源文件的预期位置。去掉 &lt;resources/&gt; 节。

你不应该使用assembly插件,除非你正在做一些非常高级的事情,然后你可能会写你自己的插件来做。

这些只是您在pom.xml 中提交的众多问题中的三个。

【讨论】:

  • 您好 Jarrod,感谢您提供深入的建议——更新了上面发布的 pom。不幸的是,我在使用 Shade 插件时仍然遇到同样的问题,ojdbc6 驱动程序出现在 uber jar 中,但在尝试运行程序时无法识别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2015-05-17
  • 1970-01-01
  • 2013-07-07
  • 2023-03-15
相关资源
最近更新 更多