我有一个连接到 Wildfly 27 实例的客户端应用程序。 要求之一是最终客户端是一个易于分发的可执行文件。 供 Windows 系统上的最终用户使用。 为了实现这一点,我使用 Maven Shade 插件和 launch4j。
当我运行创建的 exe 时,查找
TopicConnectionFactory tcf = (TopicConnectionFactory) initialContext.lookup("jms/RemoteConnectionFactory");
失败并显示 WFNAM00026: No provider for found for URI: null ##
错误消息。
如果我从 Eclipse 运行它,它会检索 tcf 作为
ActiveMQJMSConnectionFactory
。
我现在的问题是,我可以调试的实例正在工作,并且我无法为查找之外的任何内容添加打印,因为它进入了 Wildfly 类。
如果我直接运行阴影罐子,错误保持不变。
我的结论是,某些东西未包含在阴影罐子中,或者我缺少一些设置。
POM 除外:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<shadedArtifactAttached>true</shadedArtifactAttached>
<shadedClassifierName>shaded</shadedClassifierName>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>[SNIP]/main/StartApplication</mainClass>
</transformer>
</transformers>
</configuration>
</plugin>
运行 mvn package 时,这一行引起了我的注意,但我无法弄清楚如何解决它,或者它是否相关:
[INFO] Skipping pom dependency org.wildfly:wildfly-jms-client-bom:pom:27.0.1.Final in the shaded jar.
这几天我一直在努力解决这个问题,而且很绝望,所以我希望能抓住任何救命稻草。
我找到了配置中缺少资源转换器的解决方案。 我补充道:
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
<transformer implementation="org.apache.maven.plugins.shade.resource.PluginXmlResourceTransformer"/>
我现在工作了。