Java(Eclipse) – 条件编译

我有一个java项目,在j2me项目和android项目中引用。 在这个项目中,我想使用条件编译。

就像是…

//#if android ... //#endif //if j2me ... //#endif 

我一直在读这个,但我还没有找到任何有用的东西。

您可以使用Antenna (Eclipse有一个插件,您可以将它与Ant构建系统一起使用)。 我以我们描述的方式在我的项目中使用它并且它完美地工作:)

编辑:这是与@ WhiteFang34解决方案相关的示例,这是一种方法:

在您的核心项目中:

 //base class Base.java public abstract class Base { public static Base getInstance() { //#ifdef ANDROID return new AndroidBaseImpl(); //#elif J2ME return new J2MEBaseImpl(); //#endif } public abstract void doSomething(); } //Android specific implementation AndroidBaseImpl.java //#ifdef ANDROID public class AndroidBaseImpl extends Base { public void doSomething() { //Android code } } //#endif //J2ME specific implementation J2MEBaseImpl.java //#ifdef J2ME public class J2MEBaseImpl extends Base { public void doSomething() { // J2Me code } } //#endif 

在使用核心项目的项目中:

 public class App { public void something { // Depends on the preprocessor symbol you used to build a project Base.getInstance().doSomething(); } } 

如果你想为Android构建,你只需定义ANDROID预处理器符号或J2ME,如果你想为J2ME平台构建一个…

无论如何,我希望它有帮助:)

也许你应该考虑围绕特定于配置文件的逻辑创建接口(J2ME,Android或其他未来)。 然后为每个配置文件创建接口的具体实现。 您可以将任何公共部分拆分为抽象基类,以便扩展两个实现。 这样,每个配置文件的逻辑可以很好地分离,以适应不同的问题。 对于每个配置文件,只需构建适当的类集(例如,您可以按包将它们分开)。 从长远来看,维护,调试,测试和理解会更容易。

Eclipse MTJ项目提供了记录的预处理支持。 这种支持主要针对解决JavaME上的碎片问题。 我没有使用Android工具测试预处理支持,但它可能正常工作。