Maven WAR 依赖关系 - 无法解析包?

2022-09-02 22:49:45

我有战争依赖性:

    <dependency>
        <groupId>my.package</groupId>
        <artifactId>myservices</artifactId>
        <version>0.3</version>
        <type>war</type>
    </dependency>

现在,它存在于我的本地存储库中,并且该类存在于 。但是,当我去使用时,我得到的包不存在。Intelli-J 知道要改成 ,但尝试似乎根本行不通。WEB-INF/classes/my/package/myservicesmyservicesmy.packagemyservicesmy.package.myservicesimport

我需要对这种战争依赖做些什么特别的事情吗?


答案 1

正如其他答案所指出的:

  • 在 Maven 中,您不能像从 JAR 工件加载类那样从 WAR 工件加载类。
  • 因此,建议拆分一个单独的 Maven JAR 项目,其中包含要重用的类,并在原始 WAR 和新项目中都依赖于此项目。

但是,如果由于某种原因您无法/不想拆分WAR项目,您也可以告诉Maven,除了WAR之外,您还需要一个JAR工件。把它放到你的WAR项目的POM中:

<build>
    ...
    <plugins>
      ...
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <attachClasses>true</attachClasses>
        </configuration>
      </plugin>
    </plugins>
  </build>

然后,在构建 WAR 项目时,Maven 将从中创建一个 WAR 一个 JAR。

来源: Maven War 插件 FAQ

改编自doc_180的评论,因此不会被忽视。


答案 2

它只是不以这种方式工作。war 文件不应该放在类路径上,而是部署到可以处理其特殊结构的应用程序服务器(或 servlet 容器)上。

当然,你可能会在某个地方找到一个可以处理java war文件的自定义类加载器,但这不是这样做的方法。

将代码保存在 jar 中,将 jar 包含在您的战争和此应用程序中。但是,不要使用 war 作为依赖项,除非您正在构建 EAR 文件。


推荐