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

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

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

包括战争,我们已经将其依赖

 com.abc.exchange employer 2.3.M2-SNAPSHOT war compile  

它无法构建给定类未找到的exception。

任何人都可以帮我解决这个问题吗?

我收到错误maven构建失败:

 [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 

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

  .. true true  

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

你正在做的是使用WAR文件覆盖 。 Maven确实支持这一点。 然而…

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

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

如果有一些原因你不能这样做,你需要做的事情如下:

  1. 将WAR插件配置为在compile之前的阶段运行,例如generate-resources ,并确保将overlay类文件提取到${project.build.outputDirectory}

  2. 您还可以使用Maven Dependency Plugin的解包目标将依赖WAR中的类提取到${project.build.outputDirectory}

但我确实建议,如果可以将控制器重构为单独的JAR,它会更容易,更易于维护。

将控制器放入一个新的jar项目,并从webprojects到这个控制器的依赖关系。

将以下插件添加到您的共享maven war模块(用于同时创建war和jar工件):

   org.apache.maven.plugins maven-jar-plugin 2.4   make-a-jar compile  jar      org.apache.maven.plugins maven-install-plugin 2.4   install  install-file   jar ${project.artifactId} ${project.groupId} ${project.version}  ${project.build.directory}/${project.artifactId}-${project.version}.jar      

然后为依赖的maven war模块添加依赖项。

Java EE可见性标准规定,当一个战争中的类被打包为EAR时,它们不应该用于另一场战争中的类。 大多数容器都会严格执行此操作。

您应该将要共享的代码放入JAR中,并将其作为您要使用的战争中的依赖项包含在内。

在战争项目中pom.xml包括

  org.apache.maven.plugins maven-war-plugin 2.1.1  true   

这将在目标文件夹中创建your-project-0.0.1-SNAPSHOT-clases.jar以及war。

在依赖项目中包含pom.xml

   com.yourproject you-project 0.0.1-SNAPSHOT classes  

这对我有用。 希望能帮助到你。

编辑:如果我们只想要一些类文件进入jar,那么将其添加到pom.xml

  org.apache.maven.plugins maven-jar-plugin 2.4   make-a-jar compile  jar   classifier_name  com/../..      

在依赖项目中包含pom.xml

   com.yourproject you-project 0.0.1-SNAPSHOT classifier_name  

注意:两个pom.xml文件中的分类器名称必须相同