如何使用另一场战争中的类文件

2022-09-03 09:37:30

我们有两个不同的Web应用程序,我们希望将一场战争的几个控制器扩展到另一场战争中。

我们正在使用 maven 来构建项目。

为了包括战争,我们已经赋予了它的依赖性

<dependency>
            <groupId>com.abc.exchange</groupId>
            <artifactId>employer</artifactId>
            <version>2.3.M2-SNAPSHOT</version>
            <type>war</type>
            <scope>compile</scope>
        </dependency>

它无法构建给定类未找到异常。

任何身体可以帮助我如何实现这一目标吗?

我遇到错误专家构建失败:

[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project agent-war: Compilation failure: Compilation failure:
[ERROR] \projects\trunk_new\agent\src\main\java\com\platform\agent\web\AgentEmployeeController.java:[22,41] cannot find symbol
[ERROR] symbol  : class EmployeeController
[ERROR] location: package com..platform.employer.web

答案 1

您可以定义 war 插件以生成一个单独的 jar 文件,该文件可通过基于配置的分类器获得

<configuration>
  ..
  <attachClasses>true</attachClasses>
  <archiveClasses>true</archiveClasses>
</configuration>

之后,您可以在其他项目中将其用作单独的依赖项。但最好用它做一个单独的jar模块。


答案 2

您正在做的是使用WAR文件叠加。Maven确实支持这一点。然而。。。

WAR 插件在阶段中执行。在此阶段之前执行的任何插件,例如 Java 编译器(在编译阶段运行),都不会看到 WAR 插件提取的任何文件。(如果有帮助,这里是所有Maven阶段的参考列表package

如果您有能力重构项目结构,最好的方法是使用控制器创建一个普通的JAR项目,并让两个WAR都将此JAR作为依赖项拉入。

如果由于某些原因您无法执行此操作,则需要执行以下操作:

  1. 将 WAR 插件配置为在 早于 的阶段运行,例如,并确保它将覆盖类文件提取到 。compilegenerate-resources${project.build.outputDirectory}

  2. 您还可以使用 Maven 依赖项插件的解包目标将类从依赖项 WAR 提取到 。${project.build.outputDirectory}

但是我建议如果可能的话,将控制器重构为单独的JAR,这样会更容易,更易于维护。


推荐