【问题标题】:Is it possible to use war archive as library?是否可以将战争档案用作图书馆?
【发布时间】:2011-08-30 08:12:34
【问题描述】:

在我的应用程序中,我有一个位于 CLASS_PATH 中的目录,用于存储 jar 文件。我使用 ATG,所以必须在属性文件中使用我的 .class 才能有一种方法来初始化组件(在这种情况下它是 servlet)。所以我需要我的 CLASS_PATH 目录中的 webapp.war。我放了这个战争文件,但它不起作用。如何将我编译的 servlet 类放到这个目录中?

当然,从存档中只放这个已编译的类并不是一个好主意:)

【问题讨论】:

    标签: java classpath war atg


    【解决方案1】:

    我认为您正在寻找的是custom class loader,它适用于处理 WAR 文件。这样的类加载器会解压或查看 WAR 文件,以提取类文件。

    我从未听说过有人从 WAR 文件中加载,但实现起来应该不难

    【讨论】:

    • 这很有趣,但我不仅在运行时需要类文件。属性文件是 txt 文件,我想这样写:$class= com.myapp.webap.HelloServlet
    • 我认为您可以使用自定义类加载器来实现这一点。不过我不是 Java 专家,我只玩过一个 Stackoverflow。 :)
    • 我刚刚阅读了这篇文章。但这不是我需要的。我只需要在属性文件中写入类名。该文件将由 ATG Nucleus 处理。我只需要给 Nucleus 一个提示。如果我只处理这个 .properties 文件但不是我(它是框架),这种方法可能会很有趣。
    • 我可以在其他项目中编写 servlet 并像依赖项一样使用这个 jar 文件,但这是个坏主意,是吗?
    【解决方案2】:

    您的类加载器无法找到 war 中的 servlet 类,因为它们位于 WEB-INF/classes 中。

    尝试解压缩并将 WEB-INF/classes 复制到类路径位置

    【讨论】:

    • 谢谢。这是工作。但这只是临时解决方案。您认为我应该将所有 servlet 从战争中移到另一个项目(模块)并将其打包在 jar 中吗?没有hackaing,我找不到其他方法......
    【解决方案3】:

    在 ATG 中,Classpath 设置从您构建耳朵的方式开始。 ATG 中的每个模块都有一个 MANIFEST 文件,该文件指定了一个名为“ATG Classpath”的属性。此属性的值用于在运行时构造类路径。因此,如果您将类文件的路径作为该属性的值包含在内,ATG 会在创建 ear 时自动将其设置在类路径(更具体地说是 runAssembler)中。 Jboss在展开耳朵的时候会把它捡起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 2012-09-18
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      相关资源
      最近更新 更多