Java 未在Wildfly模块中使用清单类路径

Java 未在Wildfly模块中使用清单类路径,java,wildfly,wildfly-11,jboss-modules,Java,Wildfly,Wildfly 11,Jboss Modules,我正在尝试为OpenText Documentum java客户端创建Wildfly模块。以前我把它的罐子打包到.war文件中,我的应用程序正常工作,但它们的重量为23Mb 在J2SE中,您通常只需添加主jar,即dfc.jar,并自动添加其依赖项,因为类路径:条目位于dfc.jar/META-INF/MANIFEST.MF。然而,它在Wildfly 11中似乎不起作用:我创建了模块,使我的webapp依赖于它,但当我尝试从主jar加载DfException类时,Wildfly未能找到同一文件夹

我正在尝试为OpenText Documentum java客户端创建Wildfly模块。以前我把它的罐子打包到.war文件中,我的应用程序正常工作,但它们的重量为23Mb

在J2SE中,您通常只需添加主jar,即
dfc.jar
,并自动添加其依赖项,因为
类路径:
条目位于
dfc.jar/META-INF/MANIFEST.MF
。然而,它在Wildfly 11中似乎不起作用:我创建了模块,使我的webapp依赖于它,但当我尝试从主jar加载
DfException
类时,Wildfly未能找到同一文件夹中的一个依赖项:

Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/Signature
    at com.documentum.fc.common.DfException.<clinit>(DfException.java:710)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.foo.PrintClassloaders.printClassloader0(PrintClassloaders.java:50)
src/main/resources/META-INF/MANIFEST.MF:

Dependencies: documentum.dfc2
Class-Path: All-MB.jar activation.jar aspectjrt.jar certj.jar commons-
 codec-1.3.jar commons-lang-2.4.jar configservice-api.jar configservic
 e-impl.jar cryptoj.jar cryptojce.jar cryptojcommon.jar dms-client-api
 .jar jaxb-api.jar jaxb-impl.jar jcifs-krb5-1.3.1.jar jcm.jar jcmFIPS.
 jar jcmandroidfips.jar jsr173_api.jar krbutil.jar log4j.jar questFixF
 orJDK7.jar util.jar vsj-license.jar vsj-standard-3.3.jar xtrim-api.ja
 r xtrim-server.jar
PrintClassloaders.java:

Class.forName("com.documentum.fc.common.DfException");
生成的module.xml:

<module xmlns="urn:jboss:module:1.1" name="documentum.dfc2">    
    <resources>
        <resource-root path="C:\Program Files\Documentum\Shared\dfc.jar"/>
    </resources>
</module>

aspectjrt.jar
位于同一文件夹中。为什么它没有被模块类加载器选中?

我觉得你在那里尝试的东西很奇怪。模块(=Java库)属于Modules文件夹,部署应该包含一个部署描述符,其中列出了它需要的所有模块。在最简单的情况下,您只需要jboss-deployment-structure.xml文件中的dependencies部分。看

每个模块可以包含多个jar文件,并依赖于其他模块。当您查看一些现有的modules.xml文件时,您将看到它是如何运行的。module.xml中的路径名应该是相对的,否则无法将它们部署到具有不同文件夹结构的另一台计算机上


您不需要任何清单文件。

您在那里尝试的内容对我来说非常奇怪。模块(=Java库)属于Modules文件夹,部署应该包含一个部署描述符,其中列出了它需要的所有模块。在最简单的情况下,您只需要jboss-deployment-structure.xml文件中的dependencies部分。看

每个模块可以包含多个jar文件,并依赖于其他模块。当您查看一些现有的modules.xml文件时,您将看到它是如何运行的。module.xml中的路径名应该是相对的,否则无法将它们部署到具有不同文件夹结构的另一台计算机上


您不需要任何清单文件。

显然,要从清单类路径添加所有依赖的jar文件,您必须为每个jar显式创建一个
元素

对于jar太多或层次结构太深的情况,我制作了一个工具,递归解析清单并打印
jbosscli
命令来创建所需的模块

Example:
  C:\> java -cp org.foo.modulegen.Modulegen C:\some\main-jar.jar
Output:
  --absolute-resources="C:\some\main-jar.jar;C:\some\jar2.jar;..."


该工具尝试以
java.util.zip.ZipInputStream
的形式打开每个命令行参数,用
java.util.jar.MANIFEST
查找和解析
MANIFEST.MF
,然后对
类路径
属性中的每个条目执行相同的操作。它还确保不会两次打开同一个jar文件。

显然,要从清单类路径添加所有依赖的jar文件,您必须为每个jar显式创建一个
元素

对于jar太多或层次结构太深的情况,我制作了一个工具,递归解析清单并打印
jbosscli
命令来创建所需的模块

Example:
  C:\> java -cp org.foo.modulegen.Modulegen C:\some\main-jar.jar
Output:
  --absolute-resources="C:\some\main-jar.jar;C:\some\jar2.jar;..."


该工具尝试以
java.util.zip.ZipInputStream
的形式打开每个命令行参数,用
java.util.jar.MANIFEST
查找和解析
MANIFEST.MF
,然后对
类路径
属性中的每个条目执行相同的操作。它还确保不会两次打开同一个jar文件。

您不明白。自Wildfly 10以来,路径可以是绝对路径。我知道一个模块中可能有多个JAR,我只是不想手动添加它们,因为这些信息已经存在于清单文件中,我编写了Wildfly提供的内容。它不使用清单文件,不管你有多不明白。自Wildfly 10以来,路径可以是绝对路径。我知道一个模块中可能有多个JAR,我只是不想手动添加它们,因为这些信息已经存在于清单文件中,我编写了Wildfly提供的内容。它不使用清单文件,不管您有多希望