我有一个自定义 Wildfly 模块,用于以 Json 格式登录,我的 Swarm 应用程序在standalone.xml 中引用了该模块:
<subsystem xmlns="urn:jboss:domain:logging:3.0">
<console-handler name="CONSOLE">
<level name="INFO" />
<formatter>
<named-formatter name="json-formatter" />
</formatter>
</console-handler>
...
<formatter name="json-formatter">
<custom-formatter module="my.package.jsonLogFormatter" class="my.package.jsonLogFormatter.JsonFormatter"/>
</formatter>
</subsystem>
该模块保存在 Maven 存储库中,在 Maven 构建期间它会从该存储库复制到 target/classes 文件夹。
Maven wildfly-swarm-plugin 然后将模块添加到 uberjar:
<plugin>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-plugin</artifactId>
<version>2017.7.0</version>
<executions>
<execution>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
<configuration>
<additionalModules>
<additionalModule>jsonLogFormatter-1.2</additionalModule>
</additionalModules>
</configuration>
</plugin>
从 uberjar 执行时,这可以按预期工作。
但是,当直接从 IDE 运行自定义 main() 类时,似乎无法告诉 Swarm 使用此模块:
public static void main(String... args) throws Exception {
new org.wildfly.swarm.Swarm()
//.customModule("path/to/module") // <- doesn't exist
.start()
.deploy();
}
Swarm 在启动期间显示此错误:
Failed to load module "my.package.jsonLogFormatter" for formatter "json-formatter"