【问题标题】:how to make runnable jar for javaCV or openCV project from Eclipse如何从 Eclipse 为 javaCV 或 openCV 项目制作可运行的 jar
【发布时间】:2013-10-07 03:25:40
【问题描述】:
【问题讨论】:
标签:
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>
【解决方案2】:
用 ANT 构建一个 jar(用于 javacv 0.9):
安装 opencv(和/或 ffmpeg)
从https://github.com/bytedeco/javacv下载javacv
创建 Java 项目并在根目录中创建目录“lib”、“lib32”和“lib64”
并将 x64 jar 从 javacv 添加到 lib64 - lib32 和其他没有位版本的 lib 中相同
将以下 jars 添加到项目的 buildpaht(添加外部 JAR...)并设置 opencv(和/或 ffmpeg)的 Native 库路径
- 示例测试类
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);
}
}
- 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>
- 运行 ANT - jar 应该在每个 32 位和 64 位 Windows 系统上运行。同样适用于 ffmpeg 库和 unix 系统