我正在寻找像C或C ++中的编译器指令或类似Java的东西。你为什么问?
我有一堆Java代码,它曾经用于一个项目。然后是第二个项目,代码基于第一个项目。所以第一个副本有很多变化。尽管包名和内容等相同,但内部类别不同。
现在有第三个项目,比如第一个和第二个项目混合在一起。
如何构建代码以使一个代码库/ git repo包含所有三个项目代码?我如何确定要运行的代码路径?在运行时是项目1还是项目2还是项目3?编译器指令用于C / C ++。爪哇?
答案 0 :(得分:2)
Java中没有编译器指令(ifdef
)。
摘要什么是常见的并创建一个单独的库(或多个库,如果需要),它提供了重用的基本功能。然后重构所有项目以使用(即扩展或组合)库中的类。这就是OO编程的全部内容。
答案 1 :(得分:0)
我正在使用ANT构建脚本来构建我的java项目。我有一个build.properties,包含变量可以具有的各种值。我的build.xml实现了各种特定的构建目标,如debug,release,test。使用不同的构建目标进行ant(ant debug,ant release),我可以使用相同的代码库来拥有各种版本的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@;
}
<强>的build.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>