簡體   English   中英

如何從Eclipse中為javaCV或openCV項目制作可運行jar

[英]how to make runnable jar for javaCV or openCV project from Eclipse

我在Eclipse中有一個openCV項目。 現在,一旦嘗試運行jar,我就試圖使其成為可運行的Jar,但無法啟動它。 我嘗試了以下操作-https://groups.google.com/forum/#!topic/javacv/ziqKIb7PgYk

但是我聽不懂 任何人都可以解釋做有需要的人的正確方法。

在我的系統中,已安裝OpenCV。 一旦我嘗試從eclipse運行項目,一切都會正常進行。 但是,當我嘗試從runnabelJar執行相同操作時,它沒有。 我發現我沒有包含.dll文件的問題,所以應該怎么做。

我終於找到了解決方案。 是的,我們可以在使用javaCV時輕松地從eclipse中創建Runnable jar,而無需ant或maven構建。

無需使用OpenCV設置類路徑,您僅使用javaCV且無意進行jni構建。

  • 創建一個Java項目。
  • 復制所有jar。您也可以避免使用x86或linux或不需要的jar。

在此處輸入圖片說明

  • 查找jre版本,如果為32位,則獲取OpenCV 32位庫的路徑,否則獲取64位。 您可以將這些dll放在系統中的任何位置。無需將其放置在任何特定路徑中。
  • 轉到OpenCV jar,將其展開,單擊“本機庫位置”,編輯並瀏覽路徑

在此處輸入圖片說明

就是這樣,工作完成,現在制作了Runnable jar或其他任何東西,它將像魅力一樣工作。

一旦向任何用戶提供了可運行的jar,則應在類路徑中設置用戶的openCV路徑,或者提供dll,然后將庫加載到任何靜態塊中。

使用ANT構建jar(對於Javacv 0.9):

  1. 安裝opencv(和/或ffmpeg)

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

  3. 創建一個Java項目,並在根目錄中創建目錄“ lib”,“ lib32”和“ lib64”,並將x64 jars從javacv添加到lib64-lib32和lib64中沒有位版本的其他相同

  4. 將以下jar添加到項目的buildpaht中(添加外部JAR ...),並設置opencv(和/或ffmpeg)的本機庫路徑

在此處輸入圖片說明

  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. 螞蟻腳本
<?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系統

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM