我正在使用一些非常古老的单体软件,这些软件基本上是高度定制的 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:/product/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 hell)。
缺点:
- 我们进行了两次编译——一次使用 maven-compiler-plugin,一次使用 Eclipse 项目构建(Java Builder)。
- 根据我的经验,符号链接功能会受到影响。有时我们需要做刷新项目/关闭项目/构建项目的舞蹈才能让它工作。
有一个更好的方法吗? 我不能强迫他们如此重地重组项目,以至于所有可部署的都是与容器无关的 WAR,但我们的开发人员需要能够进行更改并快速测试它们,而无需手动复制/粘贴 .jar。