我有一个基于Eclipse的SWT应用程序,而不是使用Maven。
我的应用程序面向多个操作系统(CentOS,Windows和Mac)。
唯一不与操作系统无关的jar文件是SWT库,它特定于每种操作系统类型,更不用说处理器类型(x86和/或x64)。
我看到了这个other issue,但是我的目标是Maven而我没有使用Maven。
我按照概述的程序将“org.eclipse.swt”添加到我的项目中,并包含整个SWT下载的ZIP文件。这指定了Package Explorer中的第二个项目。
早些时候,当我刚刚包含swt.jar时,它更容易一些,因为我只需删除jar,包含新的jar,然后重建,但这是一个痛苦。现在我使用整个SWT ZIP,这个过程有点乏味而且不专业。
有哪些步骤,以便当我指定“右键单击> Java> Runnable JAR文件”来创建单个可执行jar时,我得到3个(或多个)不同的jar文件,每个操作系统一个? Visual Studio做得很好,只是我不知道如何在Eclipse中这样做。
更新: 为了回答评论,我想添加JFace支持,因为我想使用需要JFace的TableViewer功能。 Eclipse在第一部分中有this页面概述了如何在SWT中添加。除了在最后添加源代码之外,这些步骤都有效,但这不是主题。
我按照64位Windows的步骤进行操作,但是我必须支持CENTOS,Mac目前会“很好”。
独立于swt.jar经文org.eclipse.swt,我想要一个干净的方式(想想带有.Net的Visual Studio)为我的应用程序构建一个可运行/可执行的jar文件,每个支持的操作系统类型一个。我的想法是我指定构建(在我设置之后的任何菜单键序列)并且我为每个目标操作系统获得一个可执行jar文件。
答案 0 :(得分:0)
是的,尽管我说你可以为所有平台创建一个.jar
文件,但我无法让它正常工作。
但是,我设法启动并运行了一个示例项目,只需使用Ant就可以为每个平台创建一个单独的.jar
文件。
您可以下载整个项目here。
构建脚本如下所示:
<project name="RandomApp" basedir="." default="clean-build">
<property name="src.dir" value="src" />
<!-- Define the necessary paths -->
<property name="build.dir" value="bin_temp" />
<property name="lib.dir" value="lib" />
<property name="lib.deploy.dir" value="lib_swt" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="jar.dir" value="${build.dir}/jar" />
<!-- Define the main class -->
<property name="main-class" value="org.baz.desktop.randomapp.RandomApp" />
<!-- Define the class path -->
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar" />
<fileset dir="${lib.deploy.dir}" includes="**/swt_linux_gtk_x86.jar" />
</path>
<!-- Clean previously built files -->
<target name="clean">
<delete dir="${build.dir}" />
</target>
<!-- Compile the project -->
<target name="compile">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" includeantruntime="false" />
</target>
<!-- Define classpath and create the jar folder -->
<target name="pre_jar" depends="compile">
<pathconvert property="manifest.classpath" pathsep=" ">
<path refid="classpath" />
<mapper>
<chainedmapper>
<flattenmapper />
<globmapper from="*.jar" to="*.jar" />
</chainedmapper>
</mapper>
</pathconvert>
<mkdir dir="${jar.dir}" />
</target>
<!-- Create the jar files -->
<target name="jar" depends="pre_jar">
<!-- Linux 32bit -->
<jar destfile="${jar.dir}/${ant.project.name}_linux_gtk_x86.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" />
<attribute name="Rsrc-Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="." />
<attribute name="Rsrc-Class-Path" value="./ ${manifest.classpath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_linux_gtk_x86.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
<!-- Linux 64bit -->
<jar destfile="${jar.dir}/${ant.project.name}_linux_gtk_x64.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" />
<attribute name="Rsrc-Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="." />
<attribute name="Rsrc-Class-Path" value="./ ${manifest.classpath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_linux_gtk_x64.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
<!-- Windows 32bit -->
<jar destfile="${jar.dir}/${ant.project.name}_win32_x86.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" />
<attribute name="Rsrc-Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="." />
<attribute name="Rsrc-Class-Path" value="./ ${manifest.classpath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_win32_x86.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
<!-- Windows 64bit -->
<jar destfile="${jar.dir}/${ant.project.name}_win32_x64.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" />
<attribute name="Rsrc-Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="." />
<attribute name="Rsrc-Class-Path" value="./ ${manifest.classpath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_win32_x64.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
<!-- MacOS 32bit -->
<jar destfile="${jar.dir}/${ant.project.name}_macos_x86.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" />
<attribute name="Rsrc-Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="." />
<attribute name="Rsrc-Class-Path" value="./ ${manifest.classpath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_macosx_x86.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
<!-- MacOS 64bit -->
<jar destfile="${jar.dir}/${ant.project.name}_macos_x64.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader" />
<attribute name="Rsrc-Main-Class" value="${main-class}" />
<attribute name="Class-Path" value="." />
<attribute name="Rsrc-Class-Path" value="./ ${manifest.classpath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_macosx_x64.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
</target>
<target name="clean-build" depends="clean,jar" />
</project>
项目本身并不花哨,只是一个JFace Dialog
来表明JFace也是如此。
注意强>:
要在Windows计算机上进行编译,您必须更改一行:
<fileset dir="${lib.deploy.dir}" includes="**/swt_linux_gtk_x86.jar" />
将其更改为:
<fileset dir="${lib.deploy.dir}" includes="**/swt_win32_x64.jar" />
或
<fileset dir="${lib.deploy.dir}" includes="**/swt_win32_x86.jar" />
基本上,这一行必须代表您的系统,即您正在编译的系统。