Maven可以将模块部署到JBoss吗?

时间:2013-08-27 19:46:21

标签: java maven jboss

我们正在使用Maven项目将几个战争部署到JBoss服务器。我们最近注意到,我们几场战争所依赖的其中一个罐子使用了Xerial。当Xerial启动时,它尝试加载本机驱动程序,但只有第一个成功加载本机驱动程序,其余的失败并回退到纯Java实现,因为本机驱动程序已经在类加载器中。我们真的希望通过在所有战争中加载本机驱动程序来获得性能。

在我看来,最好的方法是将我们依赖的jar作为模块添加到JBoss服务器,然后让服务依赖它。

我的问题是,有没有办法让我们的Maven构建来做到这一点?或者我们是以完全错误的方式解决这个问题?

5 个答案:

答案 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;
&#13;
&#13;

答案 4 :(得分:0)

不可能因为你必须使用OSGI方法。 要使用maven尝试在EAP中使用OSGI,但这取决于您要查找的内容。自JBoss EAP 6.1起支持OSGI。

如果您正在尝试使用EAI,请尝试使用JBoss Fuse而不是EAP。 然后,您将使用maven存储库,nexus或类似的,热部署和所有OSGI捆绑包。