2

我正在使用一些非常古老的单体软件,这些软件基本上是高度定制的 JBoss 部署。不幸的是,这意味着 JBoss 不能从 Eclipse 中的“服务器”视图启动,它必须作为 Windows 服务或通过命令行启动。有多个 WAR/EAR,但很少使用 WAR 类加载器,并且大多数实际类文件位于 jboss/shared/lib 作为 .jars。

我们需要一种在 Eclipse 中运行 Maven 构建(通过 m2e)并将生成的 .jar 中的类文件部署到 C:/product/jboss/shared/lib 的方法,这样当我们启动 JBoss 时,我们可以使用 Eclipse 进行调试(作为远程 java 应用程序)。理想情况下,Maven 推送的工件不会覆盖最初安装的现有 .jar 文件。例如,如果 Maven 项目构建了一个名为 myjar-1.0.0.jar 的工件,我们需要一种方法将 myjar-1.0.0.jar 中的类部署到 C:/product/jboss/shared/lib/classes它们是在与产品一起安装的 C:/product/jboss/shared/lib/myjar-1.0.0.jar 之前由类加载器拾取的。

目前,我们(非常hacky)的解决方案是这样的:

  1. 在项目配置的Java Build Path>Source选项卡下,我们使用“符号链接”功能AdvancedDefault Output Directory(例如项目/目标/类)映射到类文件夹(例如 C:/product/jboss/shared/lib/classFolder)。这会修改 .project 文件,该文件已签入源代码管理。

    符号链接疯狂

  2. 我们通常使用 m2e 启动器构建项目(例如全新安装)。
  3. 假设 Maven 构建成功,我们运行 Eclipse 项目构建。这会将类文件推送到 C:/product/jboss/shared/lib/classFolder:

    类文件夹

  4. 我们重新启动 JBoss。由于 classFolders 优先于 jar,JBoss 将加载 C:/product/jboss/shared/lib/classFolder 中的类,这与我们的 Eclipse 工作区中的类相同。
  5. 我们附加到 JBoss 并将项目作为远程 Java 应用程序进行调试。

优点:

  • 我们能够将我们的新类推送到 JBoss 并对其进行测试,而无需备份原始 jar 并手动复制/粘贴新的(jar hell)。

缺点:

  • 我们进行了两次编译——一次使用 maven-compiler-plugin,一次使用 Eclipse 项目构建(Java Builder)。
  • 根据我的经验,符号链接功能会受到影响。有时我们需要做刷新项目/关闭项目/构建项目的舞蹈才能让它工作。

有一个更好的方法吗? 我不能强迫他们如此重地重组项目,以至于所有可部署的都是与容器无关的 WAR,但我们的开发人员需要能够进行更改并快速测试它们,而无需手动复制/粘贴 .jar。

4

3 回答 3

2

我会尝试查看有可能将工件复制到不同位置的maven-dependency-plugin 。

于 2012-04-23T16:11:48.173 回答
2

几岁?

你看过 Cargo 插件吗? http://cargo.codehaus.org/Quick+start

它可以部署到 JBoss 3.x。它有一个 Java API,所以你应该能够写一些东西来扩展它来做你想做的事。

你为什么要部署类而不是 jar 文件?您仍然可以通过 Eclipse 使用 jar 文件进行远程调试。

最坏的情况 - 使用 Ant。Maven 不是为这种东西设计的,试图强迫它工作只会让你痛苦。
一旦让 Maven 生成了正确的工件,就可以手动确定要做什么,然后通过 Ant 编写脚本。

于 2012-07-11T05:08:36.097 回答
0

请检查您的部署程序集(项目 -> 属性 -> 部署程序集)并验证您的 maven 库是否存在。

于 2012-07-09T13:55:40.733 回答