ben*_*min 5 java installation module wildfly
我正在将一些较旧的 Web 应用程序部署到 Wildfly 10 中,并意识到设置应用程序服务器的一个方面我只是糊涂了。我认为现在是时候尝试并真正理解我正在做的事情了。
具体来说,我不清楚以下两个有关为应用程序服务器设置模块的问题:
有没有一种“正确”的方法来预测这些信息?是否假设 JAR 的创建者会提供它?
与上面类似,JAR可以定义这些信息吗?我知道在某些情况下会有一个 MANIFEST 文件似乎提供类似的东西,但情况似乎并不总是如此。有没有办法使用清单中的信息(假设存在)来创建适当的模块信息?
模块名称与包名称匹配没有硬性规则。模块通常只使用包名称,因为它可能是唯一的命名空间。例如,您可以创建一个名为examplepackage 的模块com.example。只module.xml需要在$JBOSS_HOME/modules/example/main。请注意,这main是模块的默认插槽。
在 中,module.xml您只需要引用您的 jar 文件和所需的任何依赖项。如果您希望依赖项本身成为模块,那么您需要在module.xml文件中显式声明它们。如果您不关心每个依赖项都有自己的模块,您可以将它们全部作为资源包含在您的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>
Run Code Online (Sandbox Code Playgroud)
在上述情况下,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>
Run Code Online (Sandbox Code Playgroud)
在上面的情况下,只需example.jar在目录中即可$JBOSS_HOME/modules/example/main。
您还可以使用module addCLI 命令将模块添加到 WildFly。同样,模块名称并不重要,只要它是唯一的即可。例如,以下是如何使用 CLI 添加 PostgreSQL 模块。
module add --name=org.postgresql --resources=~/Downloads/postgresql-9.4-1203.jdbc42.jar --dependencies=javax.api,javax.transaction.api
Run Code Online (Sandbox Code Playgroud)
使用 CLI 添加模块可以避免手动创建模块结构和module.xml文件。唯一的问题是 CLI 和 WildFly 必须位于同一文件系统上,并且运行 CLI 的用户需要具有$JBOSS_HOME/modules. 该命令将自动创建目录结构,复制资源并生成文件module.xml。
就MANIFEST.MF条目而言。JBoss Modules 确实有一个用于定义名为 的模块依赖项的输入键Dependencies:。不过,我发现使用module.xml更好一些,因此如果您需要添加模块依赖项或删除模块依赖项,则无需重建或修改二进制文件。然而,对于部署来说,使用该MANIFEST.MF条目可能是有意义的。
如果您还没有看到它,请查看WildFly 文档中的类加载。这将主要解释部署的类加载如何工作。