我包含一个外部 .jar,但要求我导入其库

发布于 2024-11-11 15:11:28 字数 1660 浏览 0 评论 0原文

我成功将 ojdbc14_g.jar 包含到我的项目中,但系统要求我导入 ojdbc14_g.jar 中包含的 OracleConnectionPoolDataSource

这是我的代码:

<path id="myclasspath">
    <fileset dir="lib/">
        <include name="*.jar"/>
    </fileset>
</path>
    

<pathconvert property="lib.project.manifest.classpath" pathsep=" ">
  <path refid="myclasspath"/>
  <flattenmapper/>
</pathconvert>


<target name="compile" description="compile" depends="init">
    <javac srcdir="${sources}"  destdir="${classes}" >
        <classpath refid="myclasspath"/>
    </javac>
</target>


<target name="packaging" description=" jar construction" depends="compile" >
    <echo message="construction" />
    <jar destfile="${dist}/Integration.jar" basedir="${classes}">   
        <fileset dir=".">
            <include name="lib/ojdbc14_g.jar" /> 
        </fileset>
        <manifest>
            <attribute name="Main-Class" value="packRMI.ServerRMI" />
            <attribute name="Class-Path" value="${lib.project.manifest.classpath}"/>
        </manifest>
    </jar>
</target>

<target name="run" description="execution" depends="packaging">
    <java jar="${dist}/Integration.jar" fork="true"/>
</target>

但是当它运行时,它给了我这个异常:

线程“main”中出现异常 java.lang.NoClassDefFoundError: oracle/jdbc/pool/OracleConnectionPoolDataSource

因为无法完成以下导入:

import oracle.jdbc.pool.OracleConnectionPoolDataSource;

我该如何解决此问题?

I succeed to include ojdbc14_g.jar to my project, but I am asked to import OracleConnectionPoolDataSource which is included in ojdbc14_g.jar.

Here is my code:

<path id="myclasspath">
    <fileset dir="lib/">
        <include name="*.jar"/>
    </fileset>
</path>
    

<pathconvert property="lib.project.manifest.classpath" pathsep=" ">
  <path refid="myclasspath"/>
  <flattenmapper/>
</pathconvert>


<target name="compile" description="compile" depends="init">
    <javac srcdir="${sources}"  destdir="${classes}" >
        <classpath refid="myclasspath"/>
    </javac>
</target>


<target name="packaging" description=" jar construction" depends="compile" >
    <echo message="construction" />
    <jar destfile="${dist}/Integration.jar" basedir="${classes}">   
        <fileset dir=".">
            <include name="lib/ojdbc14_g.jar" /> 
        </fileset>
        <manifest>
            <attribute name="Main-Class" value="packRMI.ServerRMI" />
            <attribute name="Class-Path" value="${lib.project.manifest.classpath}"/>
        </manifest>
    </jar>
</target>

<target name="run" description="execution" depends="packaging">
    <java jar="${dist}/Integration.jar" fork="true"/>
</target>

But when it runs, it gives me this exception:

Exception in thread "main" java.lang.NoClassDefFoundError: oracle/jdbc/pool/OracleConnectionPoolDataSource

Because the following import can't be done:

import oracle.jdbc.pool.OracleConnectionPoolDataSource;

How can I resolve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

标点 2024-11-18 15:11:28

看来您的问题是您将 ojdbc14_g.jar 文件直接包含在应用程序 jar 文件中。 java 类加载器无法在像这样嵌套的 jar 文件中找到类。

如果您想生成一个最终的 jar,那么您可以尝试将其内容添加到您的 jar 中,而不是将 ojdbc14_g.jar 本身添加到您的 jar 中。

在您创建 jar 的构建文件中,将以下内容更改

<fileset dir=".">
  <include name="lib/ojdbc14_g.jar" /> 
</fileset>

为:

<zipfileset src="lib/ojdbc14_g.jar" />

您可能需要注意 ojdbc_g.jar 的内容与您的文件之间的冲突,特别是清单,我不确定 ant 会如何处理他们。

或者,您可以将 ojdbc jar 与应用程序 jar 分开,并使用清单的 Class-Path 属性引用它(您似乎已经对其他一些库执行了此操作)。

It looks like your problem is that you're including the ojdbc14_g.jar file directly in your application jar file. The java classloader can't find classes in jar files nested like this.

If you want to produce a single final jar, then instead of adding ojdbc14_g.jar itself to your jar, you can try adding its contents to your jar.

In your build file, where you are creating your jar, change this:

<fileset dir=".">
  <include name="lib/ojdbc14_g.jar" /> 
</fileset>

to this:

<zipfileset src="lib/ojdbc14_g.jar" />

You may need to look out for conflicts between the contents of ojdbc_g.jar and your files, in particular the manifest, I'm not sure how ant will handle them.

Alternatively, you could leave the ojdbc jar separate from your application jar, and reference it using the Class-Path attribute of your manifest (you appear to already be doing this for some other libs).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文