【问题标题】:Deploying a war file created by maven to a glassfish server, determine the order of the classpath?将maven创建的war文件部署到glassfish服务器,确定类路径的顺序?
【发布时间】:2015-05-05 12:51:41
【问题描述】:

设置

我有一个创建 war 文件的 maven 项目,然后我将 war 文件部署到 glassfish 服务器 (3.1)。

我的 Manifest 是默认的,只有基本信息,但我也尝试过 maven-war-plugin 将类路径添加到 Manifest。根据我对该插件的理解,它应该只帮助我确定我的 web-inf/lib 范围之外的库。

问题

在我的 war 文件中,我有两个依赖项,它们都包含同一个类但该类的两个不同版本,所以我需要指定我的 Glassfish Archive 类加载器以按特定顺序加载它们。现在我完全不知道如何做到这一点,这引出了我的问题。

问题

  1. 是否可以使用 Manifest 文件强制 Glassfish 使用特定的类路径?
  2. Glassfish 如何确定它在 WEB-INF/lib 中加载 jar 文件的顺序?
  3. 是否可以通过其他方式告诉 Glassfish 如何指定类路径?
  4. 如果不是,是否会影响 Glassfish 在 WEB-INF/lib 中加载 jar 文件的顺序?

【问题讨论】:

  • 为什么你不使用 maven 只打包你想要避免多个版本的同一个库的依赖项?如果这些是传递库,只需找出哪些库接受它们并在 pom.xml 中排除
  • 我希望可以,但遗憾的是,我们处于很多组件的中间,并且有很多我们必须拥有的依赖项,而这些依赖项有它们自己的依赖项。如果我排除它们在 pom.xml 中,其他依赖项将不起作用。因此,我需要使用一个特定类的最新版本,并允许其他类也位于类路径中。我们有两个客户端使用两个不同版本的 Jersey REST 客户端,并且 Jersey 包含 javax rs,如果任一 Jersey 被排除,它将停止工作,如果我直接使用 javax rs 依赖项,我会得到一个向后编译版本。跨度>
  • 你有来自不同工件的冲突类?你应该清理你的构建,否则你会撞到墙上......如果你说你不能这样做,那么你就无法处理。您必须找到问题的根本原因...如果您使用两个版本的 Jersey REST 客户端...对我来说听起来很奇怪...清理您的构建。
  • 我的项目没有使用两个不同的版本,但我的项目处于由具有不同发布周期的不同团队维护的许多其他项目的中间。我知道我不希望从不同的工件,但我真的没有选择。是的,两个不同的依赖项正在使用两个不同的 Jersey REST 客户端,而较旧的 Jersey 版本本身包含 javax rs 包这一事实是我问题的根本原因。这是为什么我会遇到这个问题,并且很乐意接受您提供的任何帮助!

标签: java maven glassfish classpath war


【解决方案1】:

(我无权在 SO 中发表评论,因此是答案) 以下链接描述了一种管理类加载顺序的方法。但是,正如其他人正确指出的那样,您要实现的目标一点也不好。

https://www.java.net/node/704037

【讨论】:

  • 我知道这不是一个好的解决方案,它是在遇到这些问题时的临时解决方案,我不喜欢它,但我真的没有选择。谢谢你的链接,我会试试这个,看看我能不能让它工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2015-12-10
  • 2014-05-30
相关资源
最近更新 更多