我正在使用Wildfly 10中部署一些较旧的Web应用程序,并意识到设置应用程序服务器的一个方面,我只是混淆了。我认为现在是时候尝试并真正了解我正在做的事情。
具体来说,我不清楚以下两个有关正确设置app服务器模块的问题:
有没有“正确”的方法来判断这些信息?是否假设JAR的创建者提供了它?
与上述类似,JAR可以定义此信息吗?我知道在某些情况下会有一个MANIFEST文件似乎提供了类似的东西,但是总是似乎就是这种情况。有没有办法使用清单中的信息(假设它存在)来创建适当的模块信息?
答案 0 :(得分:3)
模块名称与包名称匹配没有硬性规则。模块通常只使用包名称,因为它可能是唯一的命名空间。例如,您可以使用包example
创建名为com.example
的模块。 module.xml
只需要$JBOSS_HOME/modules/example/main
中的main
。请注意,module.xml
是模块的默认插槽。
在module.xml
中,您只需要引用您的jar文件和所需的任何依赖项。如果您希望依赖项是自己的模块,那么您需要在module.xml
文件中明确声明它们。如果您不关心拥有该模块的每个依赖项,您可以将它们全部作为资源包含在<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="example">
<resources>
<resource-root path="example.jar"/>
<resource-root path="guava-19.jar"/>
</resources>
</module>
中。
使用资源依赖关系的示例模块:
example.jar
在上述情况下,guava-19.jar
和$JBOSS_HOME/modules/example/main
库需要位于<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="example">
<resources>
<resource-root path="example.jar"/>
</resources>
<dependencies>
<module name="com.google.guava"/>
</dependencies>
</module>
目录中。
使用模块依赖关系的示例:
example.jar
在上述情况下,只有$JBOSS_HOME/modules/example/main
需要位于module add
目录中。
您还可以使用module add --name=org.postgresql --resources=~/Downloads/postgresql-9.4-1203.jdbc42.jar --dependencies=javax.api,javax.transaction.api
CLI命令将模块添加到WildFly。只要模块名称唯一,模块名称就不重要了。例如,您可以通过CLI添加PostgreSQL模块。
module.xml
使用CLI添加模块可以避免手动创建模块结构和$JBOSS_HOME/modules
文件。唯一的问题是CLI和WildFly必须位于同一文件系统上,运行CLI的用户需要具有module.xml
的写权限。该命令将自动创建目录结构,复制资源并生成MANIFEST.MF
文件。
就Dependencies:
条目而言。 JBoss Modules确实有一个入口密钥,用于定义名为module.xml
的模块依赖项。但是我发现使用MANIFEST.MF
更好一点,因此如果您需要添加模块依赖项或删除模块依赖项,则不必重建或修改二进制文件。但是对于部署,使用base.html
条目可能是有意义的。
如果您还没看到它,请查看class loading in WildFly documentation。这将主要解释部署的类加载如何工作。