该主题已经有几个问题,但是似乎都无法正常工作。
我的要求是构建一个可在 每个平台 上创建 一个jar 的ant脚本,即一个用于Windows x86的 jar
,一个用于Windows x64,Linux x86 / x64的 jar 。
有人有进一步的见解吗?
使用上述方法,我无法产生可行的解决方案。它以未自动加载SWT jar文件结尾或未包含在类路径中而结束。
如果有人能提出一个可行的示例(最好包括完整的源代码),那就太好了!
是的,所以我最终提出了一个在三个平台上成功测试过的解决方案。
两个魔术组件是jar-in-jar-loader和适当的构建脚本。
带有注释的构建脚本可以在这里找到:
<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" />
<property name="img.dir" value="img" />
<property name="res.dir" value="res" />
<!-- Define the main class -->
<property name="main-class" value="org.baz.desktop.randomapp.gui.RandomApp" />
<path id="base-classpath">
<fileset dir="${lib.dir}" includes="**/*.jar" />
</path>
<!-- Define the class path -->
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar" />
<fileset dir="${lib.deploy.dir}" includes="**/swt_win32_x64.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>
<macrodef name="createclasspath">
<attribute name="name" />
<attribute name="swtlib" />
<sequential>
<pathconvert property="@{name}.classpath" pathsep=" ">
<path refid="base-classpath" />
<fileset dir="${lib.deploy.dir}" includes="**/swt_@{swtlib}.jar" />
<mapper>
<chainedmapper>
<flattenmapper />
<globmapper from="*.jar" to="*.jar" />
</chainedmapper>
</mapper>
</pathconvert>
</sequential>
</macrodef>
<!-- Define classpath and create the jar folder -->
<target name="pre_jar" depends="compile">
<!-- Linux 32bit -->
<createclasspath name="win86" swtlib="win32_x86" />
<!-- Linux 64bit -->
<createclasspath name="win64" swtlib="win32_x64" />
<!-- Windows 32bit -->
<createclasspath name="linux86" swtlib="linux_gtk_x86" />
<!-- Windows 64bit -->
<createclasspath name="linux64" swtlib="linux_gtk_x64" />
<!-- MacOS 32bit -->
<createclasspath name="macos86" swtlib="macos_x86" />
<!-- MacOS 64bit -->
<createclasspath name="macos64" swtlib="macos_x64" />
<mkdir dir="${jar.dir}" />
</target>
<macrodef name="createjar">
<attribute name="swtlib" />
<attribute name="swtclasspath" />
<sequential>
<jar destfile="${jar.dir}/${ant.project.name}_@{swtlib}.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="./ @{swtclasspath}" />
</manifest>
<zipgroupfileset dir="${lib.dir}" includes="**/jar-in-jar-loader.jar" />
<zipfileset dir="${lib.deploy.dir}" includes="**/swt_@{swtlib}.jar" />
<zipfileset dir="${lib.dir}" includes="**/*.jar" excludes="**/jar-in-jar-loader.jar" />
</jar>
</sequential>
</macrodef>
<!-- Create the jar files -->
<target name="jar" depends="pre_jar">
<!-- Linux 32bit -->
<createjar swtlib="linux_gtk_x86" swtclasspath="${linux86.classpath}" />
<!-- Linux 64bit -->
<createjar swtlib="linux_gtk_x64" swtclasspath="${linux64.classpath}" />
<!-- Windows 32bit -->
<createjar swtlib="win32_x86" swtclasspath="${win86.classpath}" />
<!-- Windows 64bit -->
<createjar swtlib="win32_x64" swtclasspath="${win64.classpath}" />
<!-- MacOS 32bit -->
<createjar swtlib="macos_x86" swtclasspath="${macos86.classpath}" />
<!-- MacOS 64bit -->
<createjar swtlib="macos_x64" swtclasspath="${macos64.classpath}" />
</target>
<target name="clean-build" depends="clean,jar" />
</project>
它的基本作用是定义 没有 任何SWT库的基类路径。然后,它使用基础路径创建平台特定的类路径,并添加适当的平台SWT库。
jar
然后,该任务使用这些类路径和jar-in-jar-loader为每个平台创建一个单独的jar。
就是这样,这是一种为每个(受支持的)平台生成jar的全自动方法。
我创建了一个示例项目,人们可以下载并进行测试。对于多平台应用程序来说,这是一个简单的起点。
https://www.dropbox.com/s/ianrbl4bn0fmsdi/SWTApplication.7z
更新 :
我已经通过适当使用macrodef
:) 大大缩短了ant脚本。
问题内容: 我在Linux机器上使用jlink创建了运行时映像。而且我看到该文件夹下的文件夹。这是否意味着我只能在Linux平台上使用此运行时映像?如果是,是否有任何方法可以在一个平台上为另一个平台创建运行时映像(例如,在Linux for Windows上,反之亦然) 问题答案: 该目录用于标头文件,例如,在编译使用JNI和其他本机接口的C / C ++代码时需要这些标头文件。这与无关。 该工具
我在Linux机器上使用jlink创建了运行时映像。我在include文件夹下看到了linux文件夹。这是否意味着我只能在Linux平台上使用此运行时映像?如果是,是否有任何方法可以在一个平台上为另一个平台创建运行时映像(例如,在Linux for Windows上,反之亦然)
执行任务:[clean] 按需配置是一个正在孵化的特性。NDK缺少一个“平台”目录。如果使用的是NDK,请验证NDK.dir是否设置为有效的NDK目录。它目前被设置为/users/ishandutta2007/library/android/sdk/ndk-bundle。如果您没有使用NDK,请从ANDROID_NDK_HOME或local.properties中取消NDK变量的设置,以删除此警告
在线演示地址:http://m.close.cc/index.php 还很不完善,功能也没有完成。
我是一名PHP、HTML5、CSS3、Javascript、Jquery、Angular的全栈开发人员,热衷于学习任何新技术 现在,我有了一个混合移动应用程序项目(更简单,只需少量的curd操作和web服务),而且它还将是web应用程序,我需要尽快交付。所以我的问题是为正确的工作选择正确的工具 混合应用程序可以使用 平台:Phonegap或cordova,根据我的理解,cordova是Phoneg
问题内容: 我试图在我的Java应用程序中嵌入WebKit浏览器。我坚持使用WebKit,因为我不想用例如Eclipse SWT库中的Browser小部件支持的每个浏览器测试HTML5 / CSS / Javascript。 有没有办法在Mac,Windows和Linux上执行此操作,从而确保我的网页在Java应用程序中统一呈现? 问题答案: 从SWT 3.7 M5开始,如果使用标记创建,则小部件