[英]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.