2009-08-17 41 views
3

我想爲J2ME和J2SE構建一個應用程序。表示代碼顯然會有所不同,但我希望儘可能保持邏輯通用。從同一代碼庫編譯J2ME和J2SE應用程序的最佳方法是什麼?

我的計劃是使用Ant或Antenna的預處理器來選擇J2ME或J2SE圖形對象,該類是我的邏輯和顯示代碼之間唯一的交集。我需要的只是在我的Ant/Antenna構建任務期間在一些文件中交換一行或兩個導入。

我想就如何獲得此設置提供一些建議。

我目前有兩個Eclipse項目,一個J2ME和一個J2SE。我有我怎麼能建立預處理一對夫婦的想法:

  • 有J2SE代碼是默認的,只有預處理J2SE代碼在J2SE交換特定進口
  • 使用天線預處理兩個在J2ME和J2SE項目
  • 使用Ant文本替換進行必要的源代碼修改

    我。看起來很難正確設置
    ii。感覺有點奇怪
    iii。似乎最不好,因爲我沒有看到自己需要使用遠遠不止一點有條件的進口。

有沒有人有過這種事情的經驗?一些建議將不勝感激。

回答

3

這兩個應用程序版本都有不同的啓動方式,對吧?有一次它是一個MIDlet,另一次是一個帶有靜態主方法的Java類。在那種情況下,我看不到使用預處理的要求。兩個啓動實現都可以訪問公共代碼庫,並交付實現公共代碼庫已知接口的J2ME或J2SE「圖形」對象。通過這種方式,通用代碼庫不需要知道實現細節,只需要表示部分的接口。

順便說一句。前段時間我有類似的情況,我覺得設置3個Eclipse項目,一個J2ME,一個J2SE和一個通用邏輯項目(技術上也是一個J2ME項目)更爲舒服。這有助於防止J2ME-/J2SE-only部分之間的類名衝突。

+0

這已經被證明是我最好的選擇 - 我只需要交換J2ME和J2SE圖形對象,所以我實現了一個包裝該對象的接口。 正如你所建議的那樣,我還在每個通用和平臺特定代碼的交集處都有一個簡單的界面。 感謝您的建議! – Symmetric 2009-09-20 15:59:39

1

天線應該適用於大多數情況。爲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> 

希望這有助於!

+0

所以你認爲使用天線來建立J2S​​E項目呢? 有沒有辦法在J2ME項目中處理Eclipse中的天線式定義?我想在編輯時將J2ME代碼註釋掉,但據我所知,Eclipse只能在J2ME項目中執行此操作。 – Symmetric 2009-08-20 20:44:14

+0

我建議你使用一個帶有天線任務的ant構建文件作爲其中的一個目標,而不是依賴於Eclipse。我知道編寫一個ant構建文件可能需要一段時間,但你只寫了一次,它也讓你的生活變得輕鬆。我已經在編輯的答案中發佈了一個示例構建文件。 – Ram 2009-08-21 03:22:24

0

我已經完成了一次,所有的j2me庫都被我自己的假貨取代。這些假貨會調用所有需要的j2se庫調用。

聽起來像很多工作,但實際上很多電話是相似的,你可能不使用一切,所以你只需要創建可用的J2ME類

Endresult的一小部分:源代碼幾乎不需要任何#ifdef的東西

相關問題