3

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

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

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

4

5 回答 5

2

经过几天的观察,并与几个比我更熟悉 JBoss-Maven 交互的人交谈后,事实证明我的问题的答案是目前无法完成。没有能够将模块部署到 JBoss 的 Maven 插件。这在很大程度上是因为这些模块仅在 JBoss 启动时才由 JBoss 加载,尽管如果有人感到特别有野心并想要编写自己的 Maven 插件,理论上可以解决。

@Robert Scholte 留下的答案很好,我从中学到了,但它实际上并没有回答我的问题。

于 2013-09-06T19:23:01.417 回答
1

首先也是最重要的 Apache Maven 是一个构建管理工具。它将“打包”一个项目,通常会将其上传到存储库,以便其他项目可以使用它。但是,有一些可用的插件可以部署到 JBoss:

第一个是 JBoss 特定的,后者是一个通用的 Java EE 容器部署插件

于 2013-08-27T20:07:52.573 回答
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>

于 2014-11-24T22:05:54.380 回答
0

我建议将您的 jar 放在 jboss 服务器的 lib 文件夹中。这样,当服务器启动时,jar 会加载到共享类路径中。这将最终达到目的。

这是解释的jboss文件夹结构。 http://docs.jboss.org/jbossas/guides/installguide/r1/en/html/dirs.html

于 2013-08-27T19:55:14.490 回答
0

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

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

于 2015-11-24T17:01:28.910 回答