【问题标题】:how to make runnable jar for javaCV or openCV project from Eclipse如何从 Eclipse 为 javaCV 或 openCV 项目制作可运行的 jar
【发布时间】:2013-10-07 03:25:40
【问题描述】:

我在 Eclipse 中有一个 openCV 项目。现在我试图让它运行 Jar 但无法启动它,一旦尝试运行 jar。 我试过以下 - https://groups.google.com/forum/#!topic/javacv/ziqKIb7PgYk

但我无法正确理解。任何人都可以解释做需要的正确方法。

在我的系统中,安装了 OpenCV。一旦我尝试从 日食,一切正常。但是当我尝试从 runnabelJar 它没有。我发现我没有包括的问题 .dll 文件,那我该怎么做呢。

【问题讨论】:

标签: java eclipse opencv executable-jar


【解决方案1】:

我终于找到了解决方案。是的,我们可以在使用 javaCV 时轻松地从 eclipse 制作 Runnable jars,无需 ant 或 maven 构建。

无需使用 OpenCV 设置类路径,您只使用 javaCV,不打算用于 jni 构建。

  • 创建一个 Java 项目。
  • 复制所有 jars.You 可以避免 x86 或 linux 或不需要的 jars 作为 好吧。

  • 查找jre版本,如果是32位,则获取OpenCV 32位的路径 其他 64 位的库。您可以将这些 dll 放在 system.. 无需放置任何特定路径。
  • 转到 OpenCV jar,展开它,单击 Native Library Location , 编辑和浏览路径

就是这样,工作完成,现在制作 Runnable jar 或任何东西,它会像魅力一样工作。

一旦您向任何用户提供了可运行的 jar,则应在类路径中设置用户的 openCV 路径,或者您提供 dll,然后将库加载到任何静态块中。 p>

【讨论】:

  • 非常感谢。你有如何提供 dll 的示例脚本吗?
  • OpenCv 3.0.0 需要什么?
【解决方案2】:

用 ANT 构建一个 jar(用于 javacv 0.9):

  1. 安装 opencv(和/或 ffmpeg)

  2. https://github.com/bytedeco/javacv下载javacv

  3. 创建 Java 项目并在根目录中创建目录“lib”、“lib32”和“lib64” 并将 x64 jar 从 javacv 添加到 lib64 - lib32 和其他没有位版本的 lib 中相同

  4. 将以下 jars 添加到项目的 buildpaht(添加外部 JAR...)并设置 opencv(和/或 ffmpeg)的 Native 库路径

  1. 示例测试类
public class Main { 
    public static void main(String[] args) throws Exception, IOException {
        OpenCVFrameGrabber frameGrabber = new OpenCVFrameGrabber(new File(".\\tmp_files\\small.mp4"));
        frameGrabber.start();
        IplImage origImg = frameGrabber.grab();

        //create canvas frame named 'Demo'
        final CanvasFrame canvas = new CanvasFrame("Demo");

        //Show image in canvas frame
        canvas.showImage(origImg);

        //This will close canvas frame on exit
        canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);    
    }
}
  1. ANT -脚本
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="main" name="Main">
    <property environment="env"/>
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.6"/>
    <property name="source" value="1.6"/>
    <property name="build.dir"     value="bin"/>
    <property name="src.dir"       value="src"/>
    <property name="lib.dir"       value="lib"/> 
    <property name="lib32.dir"       value="lib32"/>
    <property name="lib64.dir"       value="lib64"/>
    <property name="classes.dir"   value="${build.dir}/classes"/>
    <property name="jar.dir"       value="${build.dir}/jar"/>
    <property name="jar.file"      value="${jar.dir}/buildOpenCvTest32_64.jar"/>
    <property name="manifest.file" value="${jar.dir}/MANIFEST.MF"/>

    <property name="main.class" value="test.Main"/>

    <path id="external.jars">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
        <fileset dir="${libV.dir}" includes="**/*.jar"/>
    </path>

    <path id="project.classpath">
        <pathelement location="${src.dir}"/>
        <path refid="external.jars" />
    </path>

    <target name="init">
        <mkdir dir="${build.dir}"/>
        <mkdir dir="${classes.dir}"/>
        <mkdir dir="${jar.dir}"/>
        <copy includeemptydirs="false" todir="${build.dir}">
            <fileset dir="${src.dir}">
                <exclude name="**/*.launch"/>
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

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

    <target name="cleanall" depends="clean"/>

    <target name="build" depends="init">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}" classpathref="project.classpath">
            <src path="${src.dir}"/>
        </javac>
    </target>

    <target name="build-jar" depends="build">
        <delete file="${jar.file}" />
        <delete file="${manifest.file}" />

        <manifest file="${manifest.file}" >
            <attribute name="built-by" value="${user.name}" />
            <attribute name="Main-Class" value="${main.class}" />
        </manifest>

        <jar destfile="${jar.file}" 
            basedir="${build.dir}" 
            manifest="${manifest.file}">
            <fileset dir="${classes.dir}" includes="**/*.class" />
            <zipgroupfileset dir="${lib.dir}" includes="**/*.jar" />
            <zipgroupfileset dir="${lib32.dir}" includes="**/*.jar" />
            <zipgroupfileset dir="${lib64.dir}" includes="**/*.jar" />
        </jar>

    </target>

    <target name="main" depends="build-jar">
        <description>Main target</description>
      </target>
</project>
  1. 运行 ANT - jar 应该在每个 32 位和 64 位 Windows 系统上运行。同样适用于 ffmpeg 库和 unix 系统

【讨论】:

    猜你喜欢
    • 2011-04-12
    • 1970-01-01
    • 2015-09-21
    • 2013-05-07
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多