Java 问题:使用ANT运行OpenCV编译的.jar文件

Java 问题:使用ANT运行OpenCV编译的.jar文件,java,opencv,ant,manifest,noclassdeffounderror,Java,Opencv,Ant,Manifest,Noclassdeffounderror,我在运行jar文件时遇到了一个问题,该文件包含我在ubuntu服务器上编译并通过ANT运行的OpenCV代码。我遵循的代码和步骤如下: 因此,我有一个简单的应用程序,如下所示: import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Scalar; class SimpleSample { static{ System.lo

我在运行jar文件时遇到了一个问题,该文件包含我在ubuntu服务器上编译并通过ANT运行的OpenCV代码。我遵循的代码和步骤如下:

因此,我有一个简单的应用程序,如下所示:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;

class SimpleSample {

  static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }

  public static void main(String[] args) {
    System.out.println("Welcome to OpenCV " + Core.VERSION);
    Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
    System.out.println("OpenCV Mat: " + m);
    Mat mr1 = m.row(1);
    mr1.setTo(new Scalar(1));
    Mat mc5 = m.col(5);
    mc5.setTo(new Scalar(5));
    System.out.println("OpenCV Mat data:\n" + m.dump());
  }

}
我的build.xml包含以下内容:

<project name="SimpleSample" basedir="." default="rebuild-run">

       <property name="src.dir"     value="src"/>

       <property name="lib.dir"     value="/var/opencv/opencv/build/modules/java/pure_test/.build/simplesample/lib"/>
       <path id="classpath">
           <fileset dir="${lib.dir}" includes="**/*.jar"/>
       </path>

       <property name="build.dir"   value="build"/>
       <property name="classes.dir" value="${build.dir}/classes"/>
       <property name="jar.dir"     value="${build.dir}/jar"/>

       <property name="main-class"  value="${ant.project.name}"/>


       <target name="clean">
           <delete dir="${build.dir}"/>
       </target>

       <target name="compile">
           <mkdir dir="${classes.dir}"/>
           <javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
       </target>

       <path id="libraries.path">    
        <fileset dir="${lib.dir}">
            <include name="*.jar"/>
        </fileset>
       </path>

    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="/var/opencv/opencv/build/modules/java/pure_test/.build/simplesample/lib/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
             <attribute name="Main-Class" value="${main-class}"/>
         </manifest>
        </jar>
    </target>

       <target name="run" depends="jar">
           <java fork="true" classname="${main-class}">
               <sysproperty key="java.library.path" path="/var/opencv/opencv/build/lib"/>
               <classpath>
                   <path refid="classpath"/>
                   <path location="${jar.dir}/${ant.project.name}.jar"/>
               </classpath>
           </java>
       </target>

       <target name="rebuild" depends="clean,jar"/>

       <target name="rebuild-run" depends="clean,run"/>

   </project>

我已经研究了一些与此问题有关的问题,例如,这基本上与我遇到的问题相同,但我尝试过的任何解决方案都不起作用。

您可以发布MANIFEST.MF文件的内容吗?恐怕不存在这样的文件。jar应用程序是通过ANT编译的,我在我的目录中没有看到任何类似的东西。我是说在你的SimpleSample.jar文件中?我不完全理解你的意思,有没有办法反编译.jar文件来获得这个结果?你可以使用winzip或任何压缩软件来查看jar文件中的内容
Exception in thread "main" java.lang.NoClassDefFoundError:     org/opencv/core/Core
at SimpleSample.<clinit>(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.opencv.core.Core
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more