【问题标题】:ClassNotFoundException loading Oracle drivers with Jetty/GradleClassNotFoundException加载Oracle驱动程序带码头/地表
【发布时间】:2012-09-06 22:15:59
【问题描述】:

我在尝试通过 Gradle 运行 Jetty 时遇到了 java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleConnectionPoolDataSource 异常,并且我已经没有想法了。 gradle 中的 jetty 配置指向一个 env 文件:

[jettyRun, jettyRunWar]*.jettyEnvXml = file('../resources/jetty/jetty-env.xml')

并且在该文件中是 JNDI 配置:

<New id="OracleDS" class="org.mortbay.jetty.plus.naming.Resource">
  <Arg>java:comp/env/OracleDS</Arg>
  <Arg>
    <New class="oracle.jdbc.pool.OracleConnectionPoolDataSource">
      ...
    </New>
  </Arg>
</New>

我一直在尝试向该文件添加一个 extraClasspath,设置 jetty.home 系统属性,并将依赖项添加到 jar(到 webapp 和 buildscript)。我也尝试过更简单的OracleDataSource 类。任何具体的建议都会非常有帮助。

【问题讨论】:

    标签: oracle jetty gradle


    【解决方案1】:

    将库文件作为标准依赖项添加到 webapp 就可以了。

    providedRuntime files("$projectDir/../lib/ojdbc14.jar")

    不幸的是,我开始采用更多受应用服务器影响的方法。不幸的是,这些选项都没有提供太多反馈,因此通过 --debug 输出的 grep 显示该解决方案导致库被一致加载。

    【讨论】:

    • 我认为从根本上来说没有更好的方法(在哪些方面会更好?),除非您希望驱动程序最终进入战争,否则您应该使用providedRuntime。不知道您所说的“除了将其添加到新配置之外”是什么意思。
    • 是的,从那以后我将它添加到新配置中。并将相应地更新答案。更好的解决方案问题主要是“我仍在研究如何有效地使用 Gradle,并且不确定这种方法是否存在我看不到的问题/不良做法”,而不是因为我实际上有任何问题或寻求改进。你是一个值得信赖的来源回答了我的担忧。 (顺便说一句,我在工作中向 Spock 和 Gradle 传教,并获得了皈依者)。
    • 我认为在configurations 下嵌套dependencies 并没有比在顶层设置dependencies 块更重要。换句话说,configurations { jetty { } } 部分没有任何用途。它正在添加一个新配置,而不用做任何事情。这就引出了dependsOn 行在做什么的问题。
    • 我从某个地方偷了它,它似乎适合我认为我需要去的地方:但我最终并不需要它,而且这个想法可能还是错误的。我还误读了您的第一条评论(在换行符上迷路了)。我正在准备需要与 Jetty 环境进行更多配置差异以弥补缺少的 AS 内容,但很少有这些内容进入 gradle 文件。
    【解决方案2】:

    我遇到了同样的问题并使用“additionalRuntimeJars”属性解决了它:

    jettyRun {
        additionalRuntimeJars = configurations.myJettyRuntime // for oracle classes
    }
    

    【讨论】:

      【解决方案3】:

      将 Oracle 依赖添加到 Jetty 插件配置中

      【讨论】:

        猜你喜欢
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 2012-05-04
        • 1970-01-01
        • 2017-05-31
        • 2011-09-10
        • 2014-09-27
        相关资源
        最近更新 更多