提问者:小点点

Lucee 5.0中的Docx4j库


背景

Docx4j是一个Java库,可用于处理Microsoft Word文档,如Java中的XML。我们用Coldfusion编写的旧应用程序已经正确地使用了这个库。然后我们转向了更新的软件Lucee。这已经给实现Docx4j库带来了问题。它最终通过将带有所有依赖项的Docx4j jar放到文件夹“wwwroot/WEB-INF/lucee/lib”中来工作。重启Lucee服务后,它正确地加载了jar。这里还有一些其他问题,但重要的是jar被加载到环境中。

那么现在有什么问题呢?

现在我们有了一个新项目,它安装在新的Lucee 5.0上。一切正常,只有docx4j出现了问题。当在代码中使用docx4j时,它会出现错误,指出Docx4j记录器工厂未加载。这是Docx4j使用的依赖项。我发现了一些信息,Lucee 5.0与外部jar库的工作方式不同,它需要成为一个OSGi框架包。但是这再次变得很难理解Lucee需要什么来让它工作

我试图实现什么

每次使用Coldfusion/Lucee时,都会用到jar文件Docx4j和所有依赖jar文件。所以我把所有这些jar文件放在Coldfusion读取的文件夹中,然后它就可以工作了。所以我想说的是,没有设置文件或类似的东西(可能在jar文件本身中?)

我试过什么?

当然,我尝试了几件事:

>

  • 首先,我尝试将它放入“inetpub/wwwroot/WEB-INF/Lucee/lib”。您第一次在前端加载该函数时,它会声明无法加载记录器工厂。在此之后调用该函数后,它会声明根本无法加载docx4j。它仍然在管理员中写道Docx4j仍然处于活动状态。

    尝试通过Lucee管理员将其作为zip文件上传,它表示上传太大了

    试着把它放在“露西/tomcat/露西-服务器/上下文/lib”中。与第1点完全相同的问题。我也可以在服务仍在运行时重命名Docx4j jar。这是工作示例中不可能的。第二次之后错误发生了变化,这也很奇怪。这可能是露西对jar文件做了些什么。

    我认为解决方案是什么?

    我发现一些信息表明Lucee 5.0对jar库做了一些不同的事情。现在,它希望成为OSGi的一部分。您可以通过给定一个manifest.xml文件来制作一个包,该文件将jar文件制作成一个包。但是我不知道该怎么做。因为它总是与以前的版本一起工作,我认为解决方案可能非常简单。即增加一行说明依赖关系。因此,可能需要一个cfadmin标记来加载这些依赖项,供Docx4j使用。

    哪些是有用的信息?

    • 我从错误/jar文件中截取的一些屏幕截图:https://postimg.org/gallery/39zbmifbi/
    • 这是一个有相同问题的人:https://groups.google.com/forum/#!主题/lucee/LKRS7otUYjc

    从4.5版到5版的更新不应该有这样的结果。我们需要库,否则我们必须回到旧版本,我们的客户不同意。我真的认为最后一个链接有解决方案,但是很难处理信息。


  • 共1个答案

    匿名用户

    使用Lucee 5,您有三种选择:

    1) 如果库是 OSGi 捆绑包,只需将其放在 {lucee-server}/捆绑包

    2) 如果库不是 OSGi 捆绑包,就像 Docx4j 的情况一样,请将 jar(及其依赖项,如果需要)放入 servlet 容器的类路径中,例如 Tomcat 或 Jetty(或您使用的任何容器)。

    “最简单”的事情是将jar放在与Lucee jar相同的目录中。

    另一个选项是更新容器的类路径,例如,对于Tomcat,将其添加到< code > { catalina-base }/conf/catalina . properties 中的< code>common.loader中。

    3)指定一个自定义路径为您的罐子,无论是作为参数createObject(java…),或在Application.cfc通过this.javaSettings

    至于缺少的依赖项,请务必使用包含所有依赖项的jar,即docx4j-community-3.3.1.zip而不是docx4j-3.3.1.jar如果从http://www.docx4java.org/downloads.html下载