我继承了一个在Tomcat下运行的Java应用程序(servlets).由于历史原因,代码具有基于应用程序部署位置的不同"外观和感觉"选项(主要是品牌推广).
有几个常量控制着这个品牌推广过程,它们具有不同的功能,不应该压缩成一个常量(即BRAND,MULTI-LANGUAGE,以及图标和css样式表的位置等).
目前,开发团队必须手动更改常量(它们至少本地化在一个数据类中并且有详细记录),然后使用ANT重新编译应用程序.
假设至少假设Ant 1.8和Java 6.x,自动化此过程的最佳方法是什么?
我知道使用编译器参数没有任何好的解决方案(就像在C或C++中可以做到的那样),并且我倾向于使用一些"最好的方法"来编辑包含常量的源文件,或者将它们放入另一个文件中使用ant构建过程将它们交换出来.我希望得到的结果可以使用像"ant build brand-x"这样的东西,改变品牌会改变结果.
谢谢,
-Richard
将您的值放入属性文件中,比如"myapp.properties",然后在启动时从类路径将它们加载到常量中(请参阅下面的内容,了解它如何适合构建过程):
public class Constants { private static final Properties props = new Properties(); public static final String MY_CONSTANT; static { InputStream input = Constants.class.getResourceAsStream("/myapp.properties"); if(input != null) { try { properties.load(input); } catch(IOException e) { // TODO log error } } // Initialize constants (dont' forget defaults) MY_CONSTANT = properties.getProperty("constant", "default"); // .. other constants ... } }
现在,为每个品牌设置一个单独的属性文件.通过-D或build.properties将其名称传递给ANT,然后在将jar文件(或者用于它)之前将文件复制到构建目录中.
显然,上面的代码可以工作,但有很多方法可以清理它并使其成为防弹.