我正在寻找类似 C 或 C++ 中的编译器指令或类似 Java 的东西。你为什么问?
我有一段 Java 代码,它曾经用于一个项目。然后是第二个项目,代码是基于第一个项目的。所以第一个副本有很多变化。尽管就包名称和内容等而言结构相同。但内部类不同。
现在有第三个项目,就像第一个和第二个混合在一起。
如何构建代码以拥有一个包含所有三个项目代码的代码库/ git 存储库?以及如何确定要运行的代码路径?在运行时是项目 1 还是项目 2 或项目 3?编译器指令用于 C/C++。爪哇?
我正在寻找类似 C 或 C++ 中的编译器指令或类似 Java 的东西。你为什么问?
我有一段 Java 代码,它曾经用于一个项目。然后是第二个项目,代码是基于第一个项目的。所以第一个副本有很多变化。尽管就包名称和内容等而言结构相同。但内部类不同。
现在有第三个项目,就像第一个和第二个混合在一起。
如何构建代码以拥有一个包含所有三个项目代码的代码库/ git 存储库?以及如何确定要运行的代码路径?在运行时是项目 1 还是项目 2 或项目 3?编译器指令用于 C/C++。爪哇?
Java中没有编译器指令 ( ifdef
)。
抽象出常见的内容并创建一个库(或多个库,如果需要),以提供可重用的基本功能。然后重构所有项目以使用(即扩展或组合)库中的类。这就是面向对象编程的全部内容。
我正在使用 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>