【发布时间】:2012-04-23 15:17:08
【问题描述】:
我正在使用一些非常古老的单体软件,这些软件基本上是高度定制的 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)的解决方案是这样的:
-
在项目配置的
Java Build Path>Source选项卡下,我们使用Advanced下的“符号链接”功能将Default Output Directory(例如项目/目标/类)映射到类文件夹(例如C:/产品/jboss/shared/lib/classFolder)。这会修改 .project 文件,该文件已签入源代码管理。 - 我们通常使用 m2e 启动器构建项目(例如全新安装)。
-
假设 Maven 构建成功,我们运行 Eclipse 项目构建。这会将类文件推送到 C:/product/jboss/shared/lib/classFolder:
- 我们重新启动 JBoss。由于 classFolders 优先于 jar,JBoss 将加载 C:/product/jboss/shared/lib/classFolder 中的类,这与我们的 Eclipse 工作区中的类相同。
- 我们附加到 JBoss 并将项目作为远程 Java 应用程序进行调试。
优点:
- 我们能够将新类推送到 JBoss 并对其进行测试,而无需备份原始 jar 并手动复制/粘贴新的 jar(jar 地狱)。
缺点:
- 我们进行了两次编译——一次使用 maven-compiler-plugin,然后 一次使用 Eclipse 项目构建(Java Builder)。
- 根据我的经验,符号链接功能受到影响。有时我们需要 做刷新项目/关闭项目/构建项目舞来让它 工作。
有没有更好的方法来做到这一点?我不能强迫他们对项目进行大量重组,以至于所有可部署的 WAR 都是与容器无关的 WAR,但我们的开发人员需要能够快速做出更改无需手动复制/粘贴 .jar 即可对其进行测试。
【问题讨论】:
标签: java eclipse maven jboss m2e