Linux覆盖Java资源文件

时间:2013-10-23 09:15:32

标签: java linux jboss quartz-scheduler

我想覆盖在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资源?

提前致谢

1 个答案:

答案 0 :(得分:2)

它无法工作的原因是因为您正在修改从classLoader读取的资源。 这不会修改war的资源条目。

您可以使用标准java命令“jar uf”更新war( http://docs.oracle.com/javase/tutorial/deployment/jar/update.html

步骤可以是:

  1. 将修改后的“quartz-jobs.xml”保存在target-war所在的目录中。

  2. 创建一个执行器(quartz_updader.sh)并添加命令以转到右侧目录并更新jar:

    cd#director-where-war-and-updated-xml-reside

    jar uf#target-war quartz-jobs.xml

  3. 授予(quartz_updader.sh)执行权限。

  4. 使用Runtime.getRuntime()从java执行.sh。exec(命令) 其中command = sudo ./quartz_updader.sh

  5. 以上是假设“quartz-jobs.xml”直接在战争中而不是某些相对位置。 如果它位于相对位置,请将上述方法修改为:

    • 在#target-war旁边创建#relative-location#hierarchy并保持新的 它下面的“quartz-jobs.xml”。
    • 修改.sh文件jar更新命令:jar uf#target-war#relative-loc / quartz-jobs.xml