2013-10-23 70 views
0

我想覆盖一个quartz-jobs.xml文件,我在一个Linux x86机器下的JBOSS中部署了一个WAR文件。Linux覆盖Java资源文件

我已经试过几件事情,但我一直没能得到正确的路径正确地做到这一点:

写入错误:/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资源?

在此先感谢

回答

2

为什么它不工作的原因是因为要修改的资源类加载器从阅读。 这不会修改战争的资源项目。

您可以通过使用标准的java命令 “罐子UF” 更新战( http://docs.oracle.com/javase/tutorial/deployment/jar/update.html

的步骤可以是:

  1. 保留修改过的 “石英jobs.xml” 在同一目标战争目录。

  2. 创建执行人(quartz_updader.sh)和add命令用于将正确的目录和更新的jar:

    CD#主任那里,战争和更新的XML-驻留

    罐子UF#目标战石英jobs.xml

  3. 给正确的权限(quartz_updader.sh)为执行。使用调用Runtime.getRuntime()。EXEC(命令)从Java

  4. 执行.SH 其中命令=须藤./quartz_updader.sh

上面是对假设 “石英jobs.xml”直接处于战争而不是某个相对位置。 如果是在相对位置,修改上述方法:

  • 创建#相对位置#层次旁边#目标的战争,并保持新 “石英jobs.xml”在它之下。
  • 修改sh文件的jar更新命令:罐子 UF#目标战#相对LOC /石英jobs.xml
+0

在Windows中,我可以仅仅通过细节“石英工作完全更新此文件。 xml“作为文件路径。但是,在Linux中,不可能同样工作。也许最好是重新安排工作,而不是更新这个文件:S。感谢您的快速回答。 – aloplop85