【问题标题】:M2E WTP Copy Provided JarM2E WTP 副本提供的 Jar
【发布时间】:2013-07-01 12:18:33
【问题描述】:

我有一个自定义类加载器 jar <scope>provided</scope> 在我的 web 应用程序运行之前必须在 tomcat/lib 中,否则它无法启动。我正在使用 WTP。有什么方法可以配置 M2E/WTP 在部署过程中自动将此自定义 jar 复制到 tomcat/lib?

编辑:

不一定要使用 WTP,我也可以使用例如使用 tomcat6-maven-plugin 的解决方案。

【问题讨论】:

  • 使用provided 范围,您将其标记为由服务器容器提供。如果它无法启动,可能是因为它在服务器中不可用。您是否尝试过省略范围?
  • 如果我使用默认范围,它将依赖项复制到 WEB-INF/lib 并且不能用作类加载器。这个jar需要在tomcat/lib中。
  • 你为什么不把jar复制到那个目录呢?我怀疑你是否可以使用 Maven 或 WTP 实现类似的目标。

标签: eclipse maven m2e eclipse-wtp m2e-wtp


【解决方案1】:

要使用 Tomcat Maven 插件运行嵌入式 Tomcat 实例,请将 Tomcat lib 目录中所需的 JAR 添加为 Tomcat 插件本身的依赖项,如 in this example 所示,以及 derby 和 javamail 依赖项。

【讨论】:

  • 这行得通,但现在它坏了,因为类加载器 jar 依赖于 WEB-INF/lib 中的另一个 jar,它找不到它。
  • @Ring 从 Tomcat 的 lib 目录中的 JAR 加载的类将无法看到您的 webapp 类 - 请参阅 Tomcat's classloader page 以获得解释。 Tomcat的lib目录使用common类加载器,你的webapp是common的子类,子类加载器只能看到父类,父类看不到子类。我可以问一下您要从 Tomcat 的通用类加载器中加载什么,该类加载器需要查看您的 web 应用程序的类吗?也许还有其他解决方案?
【解决方案2】:

我花了很多时间研究这个问题,以下是我的发现:

tomcat6-maven-plugin 无法正确模拟the tomcat boot order,如this jira issue 及其tomcat6-maven-plugin source 所示。

然而,经过更多研究,我发现了另一个我不知道存在的 maven 插件:cargo。 Thanks to their excellent documentation 我能够使用自定义(和挑剔的)类加载器 jar 运行我的项目。

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2013-01-02
    • 2013-04-28
    • 2015-01-15
    • 2013-01-21
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多