我想覆盖在Linux x86机器下部署在JBOSS中的WAR中的quartz-jobs.xml文件。
我尝试过几件事,但是我无法正确地找到正确的道路:
编写错误: /content/ThisIsMyWar.war/WEB-INF/classes/quartz-jobs.xml (没有此类文件或目录)
目前,代码就是这样(但我尝试了一些没有成功的事情):
String urlPath = null;
String filePath = null;
final URL url = classLoader.getResource("quartz-jobs.xml");
if (url != null) {
urlPath = URLDecoder.decode(url.getPath(), "UTF-8");
}
if (urlPath != null) {
filePath = urlPath;
} else {
filePath = new File("quartz-jobs.xml").getAbsolutePath();
}
final File file = new File(filePath);
LOG.warn(String.format("File %s absolute: %s", url.getPath(), file.getAbsolutePath()));
LOG.warn(String.format("File canonical: %s", file.getCanonicalPath()));
writer = new BufferedWriter(new FileWriter(file));
writer.write(newQuartzJobsXml);
是否可以在Linux中覆盖XML资源?
提前致谢
答案 0 :(得分:2)
它无法工作的原因是因为您正在修改从classLoader读取的资源。 这不会修改war的资源条目。
您可以使用标准java命令“jar uf”更新war( http://docs.oracle.com/javase/tutorial/deployment/jar/update.html)
步骤可以是:
将修改后的“quartz-jobs.xml”保存在target-war所在的目录中。
创建一个执行器(quartz_updader.sh)并添加命令以转到右侧目录并更新jar:
cd#director-where-war-and-updated-xml-reside
jar uf#target-war quartz-jobs.xml
授予(quartz_updader.sh)执行权限。
使用Runtime.getRuntime()从java执行.sh。exec(命令) 其中command = sudo ./quartz_updader.sh
以上是假设“quartz-jobs.xml”直接在战争中而不是某些相对位置。 如果它位于相对位置,请将上述方法修改为: