0

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

提前致谢

4

1 回答 1

2

它不起作用的原因是因为您正在修改从 classLoader 读取的资源。这不会修改战争的资源条目。

您可以使用标准 java 命令“jar uf”( 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-warquartz-jobs.xml

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

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

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

  • 在#target-war 旁边创建#relative-location# 层次结构,并在其下保留新的“quartz-jobs.xml”。
  • 修改.sh文件jar更新命令:jar uf #target-war #relative-loc/quartz-jobs.xml
于 2013-10-23T11:35:50.067 回答