我成功将 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>
但是当它运行时,它给了我这个例外:
Exception in thread "main" java.lang.NoClassDefFoundError: oracle/jdbc/pool/OracleConnectionPoolDataSource
因为无法完成以下导入:
import oracle.jdbc.pool.OracleConnectionPoolDataSource;
我该如何解决这个问题
答案 0 :(得分:0)
看起来您的问题是您将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属性引用它(您似乎已经为其他一些库执行此操作)。