我们正在使用Maven项目将几个战争部署到JBoss服务器。我们最近注意到,我们几场战争所依赖的其中一个罐子使用了Xerial。当Xerial启动时,它尝试加载本机驱动程序,但只有第一个成功加载本机驱动程序,其余的失败并回退到纯Java实现,因为本机驱动程序已经在类加载器中。我们真的希望通过在所有战争中加载本机驱动程序来获得性能。
在我看来,最好的方法是将我们依赖的jar作为模块添加到JBoss服务器,然后让服务依赖它。
我的问题是,有没有办法让我们的Maven构建来做到这一点?或者我们是以完全错误的方式解决这个问题?
答案 0 :(得分:2)
经过几天的观察,并与几个比我更熟悉JBoss-Maven交互的人交谈后,我的问题的答案是,目前无法完成。没有能够将模块部署到JBoss的Maven插件。这在很大程度上部分原因在于模块只在JBoss启动时才加载,尽管如果有人感觉特别雄心勃勃并希望编写自己的Maven插件,理论上它可以解决。
@Robert Scholte留下的答案很好,我从中学到了答案,但实际上并没有回答我的问题。
答案 1 :(得分:1)
首先,大部分Apache Maven都是 build 管理工具。它将“打包”一个项目,并且通常会将其上传到存储库,以便其他项目可以使用它。 但是,有可用的插件,可以部署到JBoss:
第一个是JBoss特定的,后者是一个通用的Java EE容器部署插件
答案 2 :(得分:0)
我建议把你的jar放在jboss服务器的lib文件夹中。这样,当服务器启动时,jar就会加载到共享类路径中。这绝对会达到目的。
这是jboss文件夹结构化的expleained。 http://docs.jboss.org/jbossas/guides/installguide/r1/en/html/dirs.html
答案 3 :(得分:0)
我知道这个问题已被标记为已回答,答案是目前这是不可能的,但我想提供另一种观点。我正在使用Maven在我的工作中将Jboss模块部署到EAP 6.1。我们所做的是使用maven-wagon插件将模块scp到jboss服务器上的tmp目录。然后,我使用maven-wagon插件向服务器发出ssh命令,以调用jboss-cli.sh脚本并告诉它执行模块安装。这是一个示例配置:
<profile>
<id>uat</id>
<activation>
<activeByDefault>false</activeByDefault>
<property>
<name>switchEnv</name>
<value>uat</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0-beta-5</version>
<executions>
<execution>
<id>upload-file-qa-server-one</id>
<phase>deploy</phase>
<goals>
<goal>upload-single</goal>
</goals>
<configuration>
<fromFile>${project.build.directory}/${project.build.finalName}.${project.packaging}</fromFile>
<url>scp://jboss@jboss-server-1/tmp/</url>
<toFile>${project.name}.${project.packaging}</toFile>
</configuration>
</execution>
<execution>
<id>upload-file-qa-server-two</id>
<phase>deploy</phase>
<goals>
<goal>upload-single</goal>
</goals>
<configuration>
<fromFile>${project.build.directory}/${project.build.finalName}.${project.packaging}</fromFile>
<url>scp://jboss@jboss-server-2/tmp/</url>
<toFile>${project.name}.${project.packaging}</toFile>
</configuration>
</execution>
<execution>
<id>install-module-qa-server-one</id>
<phase>deploy</phase>
<goals>
<goal>sshexec</goal>
</goals>
<configuration>
<serverId>jboss-server-1</serverId>
<url>scp://jboss@jboss-server-1/tmp</url>
<commands>
<command>/opt/jboss/bin/jboss-cli.sh -c --command="module add --name=${project.name} --resources=/tmp/${project.name}.${project.packaging} --dependencies=javax.api,javax.transaction.api"</command>
<command>sleep 5</command>
<command>rm -f /tmp/${project.build.finalName}.${project.packaging}</command>
</commands>
</configuration>
</execution>
<execution>
<id>install-module-qa-server-two</id>
<phase>deploy</phase>
<goals>
<goal>sshexec</goal>
</goals>
<configuration>
<serverId>jboss-server-2</serverId>
<url>scp://jboss@jboss-server-2/tmp</url>
<commands>
<command>/opt/jboss/bin/jboss-cli.sh -c --command="module add --name=${project.name} --resources=/tmp/${project.name}.${project.packaging} --dependencies=javax.api,javax.transaction.api"</command>
<command>sleep 5</command>
<command>rm -f /tmp/${project.build.finalName}.${project.packaging}</command>
</commands>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
&#13;
答案 4 :(得分:0)
不可能因为你必须使用OSGI方法。 要使用maven尝试在EAP中使用OSGI,但这取决于您要查找的内容。自JBoss EAP 6.1起支持OSGI。
如果您正在尝试使用EAI,请尝试使用JBoss Fuse而不是EAP。 然后,您将使用maven存储库,nexus或类似的,热部署和所有OSGI捆绑包。