我试图使用Struts整理出一个包含几个webapp的旧系统。以前的构建系统刚刚是一套相当hacky的Ant脚本,这些脚本多年来已经建立起来,我试图用Maven和一个合适的CI(Jenkins)取而代之。
我目前遇到的问题是,有一个名为“build-live”的Ant任务。取代字符串' 8080'和' 4343' (dev值)与''和' 443' (实时值)分别在几个webapps的struts-config.xml文件中。有一个任务' build-local'反其道而行之。
配置文件中的XML如下:
<plug-in className="org.apache.struts.action.SecurePlugIn">
<!-- Set to 80 by 'build-live' Ant task -->
<set-property property="httpPort" value="8080"/>
<!-- Set to 443 by 'build-live' Ant task -->
<set-property property="httpsPort" value="4343"/>
</plug-in>
我设法在Maven中使用AntRun插件来做同样的事情,因此它可以与Maven一起使用,但是因为这需要依赖于环境的重建,它打破了我的主要目标&#39; Build Once ,随处部署&#39;。
因此,我希望有人可以向我解释是否可以将这些转化为可注射的属性。
答案 0 :(得分:0)
所以我最终用自己的方法扩展了SecurePlugIn类,并覆盖了init方法:
public class PropertisedSecurePlugin extends SecurePlugIn {
@Override
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {
super.init(servlet, config);
String dev = System.getProperty("dev");
if (Boolean.TRUE.toString().equals(dev)) {
setHttpPort("8080");
setHttpsPort("4343");
} // Else not required here as it falls back to defaults
}
}
它很脏,但它有效。