0

我正在寻找类似 C 或 C++ 中的编译器指令或类似 Java 的东西。你为什么问?

我有一段 Java 代码,它曾经用于一个项目。然后是第二个项目,代码是基于第一个项目的。所以第一个副本有很多变化。尽管就包名称和内容等而言结构相同。但内部类不同。

现在有第三个项目,就像第一个和第二个混合在一起。

如何构建代码以拥有一个包含所有三个项目代码的代码库/ git 存储库?以及如何确定要运行的代码路径?在运行时是项目 1 还是项目 2 或项目 3?编译器指令用于 C/C++。爪哇?

4

2 回答 2

2

Java中没有编译器指令 ( ifdef)。

抽象出常见的内容并创建一个库(或多个库,如果需要),以提供可重用的基本功能。然后重构所有项目以使用(即扩展或组合)库中的类。这就是面向对象编程的全部内容。

于 2013-06-19T22:12:03.063 回答
0

我正在使用 ANT 构建脚本来构建我的 java 项目。我有一个 build.properties,其中包含变量可以具有的各种值。我的 build.xml 实现了各种特定的构建目标,例如调试、发布、测试。使用不同的 ant 构建目标(ant 调试、ant 发布),我可以使用相同的代码库拥有各种版本的 jar。非常适合基于 ant 目标的构建时间变量。

build.properties

# Build Parameters
# Turn On of Off debugging
config.debug_true=true
config.debug_false=false

Config.java 在项目的某处定义这个 java 类。我在项目目录下的 /config 文件夹中做了。

package com.stackoverflow.ajitk;

public class Config {

   // Build for DEBUG or RELEASE
   public final static boolean DEBUG = @CONFIG.DEBUG@;
}

构建.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="ABC" default="release">
    <property file="build.properties" />

...

  <macrodef name="copy-release-parameters">
      <sequential>
    <property name="config-target-path" value="gen/com/stackoverflow/ajitk"/>
    <!-- Copy the configuration file, replacing tokens in the file. -->
    <copy file="config/Config.java" todir="${config-target-path}"
    overwrite="true" encoding="utf-8">
    <filterset>
        <filter token="CONFIG.DEBUG" value="${config.debug_false}"/>
        <--... add more variables as needed by your project ... -->
    </filterset>
    </copy>
      </sequential>
  </macrodef>

...

<-- the above macro should be used in your release/debug target -->

...

</project>
于 2013-06-19T23:16:31.903 回答