[英]Javadoc through Ant task with {@inheritDoc} from J2SE classes
[英]What is the best way to compile J2ME and J2SE apps from the same codebase?
我正在尝试为J2ME和J2SE构建一个应用程序。 演示代码显然会有所不同,但我希望尽可能保持逻辑的共性。
我的计划是使用Ant或Antenna的预处理器来选择J2ME或J2SE Graphics对象,该类是我的逻辑和显示代码之间的唯一交集。 我需要的是在Ant / Antenna构建任务期间在几个文件中交换一行或两行导入。
我想就如何设置这个问题提出一些建议。
我目前有两个Eclipse项目,一个J2ME和一个J2SE。 关于如何设置预处理器,我有几个想法:
使用Ant文本替换来进行必要的源修改
一世。 看起来很难设置正确
II。 感觉有点kludgy
III。 看起来最不好,因为我认为自己不需要使用比一些条件导入更多的东西。
有没有人有这种经历? 一些建议将不胜感激。
两个应用程序版本都有不同的启动方式,对吧? 有一次它是一个MIDlet,另一次是一个带有静态main方法的Java类。 在那种情况下,我没有看到使用预处理的要求。 两个启动实现都可以访问公共代码库并移交J2ME或J2SE“graphics”对象,该对象实现公共代码库已知的接口。 这样,公共代码库不需要知道实现细节,它只需要表示部分的接口。
BTW ..前段时间我有类似的情况,我觉得设置3个Eclipse项目,J2ME,J2SE和一个通用逻辑项目(技术上也是一个J2ME项目)更为舒服。 这有助于防止仅J2ME- / J2SE部分之间的类名冲突。
天线应该适用于大多数情况。 为J2SE和J2ME使用单一源代码的优点是,您可以从源代码的维护中获得保存,并且还可以消除错误蔓延的可能性。我也有类似的问题,但我必须编写一个适合的自定义预处理器我的需要。 但是对于大多数用途,天线可以很好地完成工作
编辑:示例构建文件
<project name="SomeProject" default="buildJ2ME" basedir="..">
...
...
...
<taskdef name="jadUpdater" classname="net.jxta.j2me.tools.Jad" classpath="${lib.dir}/jxta-tools.jar"/>
<taskdef resource="proguard/ant/task.properties" classpath="${lib.dir}/proguard.jar" />
<taskdef resource="antenna.properties" classpath="${lib.dir}/antenna-bin-1.0.2.jar" />
<macrodef name="preprocess">
<attribute name="source"/>
<attribute name="dest"/>
<attribute name="symbols"/>
<sequential>
<wtkpreprocess
version="2"
srcdir="@{source}"
destdir="@{dest}"
symbols="@{symbols}"
printsymbols="true">
</wtkpreprocess>
</sequential>
</macrodef>
<target name="compile" depends="init">
<copy todir="${temp.dir}/src" >
<fileset dir="${src.dir}"/>
</copy>
<preprocess source="${temp.dir}/src" dest="${temp.dir}/preprocessed" symbols="${symbols}"/>
<javac srcdir="${temp.dir}/preprocessed"
destdir="${temp.dir}/classes"
bootclasspath="${bootclasspath}"
classpath="${lib.dir}"
debug="off"
source="1.3"
target="1.1" />
<antcall target="jarForObfuscate"/>
</target>
<target name="buildJ2ME" depends="clean">
<property name="symbols" value="J2ME1,J2ME2"/>
<antcall target="compile"/>
</target>
<target name="buildJ2SE">
<property name="symbols" value="J2SE1,J2SE2"/>
<antcall target="compile"/>
</target>
...
...
...
</project>
希望这可以帮助!
我做过一次所有的j2me库都被我自己的假货取代了。 这些假货会调用所有需要的j2se lib调用。
听起来很多工作,但实际上很多调用是相似的,你可能没有使用所有东西所以你只需要创建一小部分可用的j2me类
Endresult:源代码几乎不需要任何#ifdef东西
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.