我们有两个不同的Web应用程序,我们希望一个战争的几个控制器延伸到另一场战争。
我们使用Maven构建项目。
包括战争中,我们已经给它的依赖性,
<dependency>
<groupId>com.abc.exchange</groupId>
<artifactId>employer</artifactId>
<version>2.3.M2-SNAPSHOT</version>
<type>war</type>
<scope>compile</scope>
</dependency>
这是无法建立给类未发现异常。
任何机构可以帮助我如何实现这一目标?
我收到错误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
您可以定义战争插件产生一个单独的jar文件,它通过基于该分类可以配置 :
<configuration>
..
<attachClasses>true</attachClasses>
<archiveClasses>true</archiveClasses>
</configuration>
在此之后,你可以用这个作为其他项目单独的依赖性。 但是,最好做一个单独的jar模块出来。
你在做什么用的WAR文件覆盖 。 Maven的不支持此。 然而...
该WAR插件执行在package
阶段。 任何插件,如Java编译器(运行在编译阶段),执行前这一阶段将不会看到WAR插件已经提取的所有文件。 (这里是所有的Maven阶段的参考名单是否有帮助)
如果你重构你的项目结构的能力,最好的办法是创建你的控制器正常的JAR项目,并有两场战争中拉这个JAR作为一个依赖。
如果有一些原因,你不能做到这一点,你需要做这样的事情:
配置WAR插件来在运行期早于compile
,如generate-resources
,并确保它提取覆盖类文件${project.build.outputDirectory}
。
你也可以使用Maven Dependency插件的解压目标提取依赖WAR类${project.build.outputDirectory}
。
但我建议,如果在所有可能的重构你的控制器到一个单独的JAR,它是非常容易和更容易维护。
把控制器到一个新的JAR项目,并从您webprojects依赖于这个控制器。
添加以下插件到你的份额行家战模块(用于在同一时间创建战争和JAR神器):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>make-a-jar</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<packaging>jar</packaging>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<file>
${project.build.directory}/${project.artifactId}-${project.version}.jar
</file>
</configuration>
</execution>
</executions>
</plugin>
然后加入依赖于你的依赖行家战模块。
Java EE的visability标准规定,从一个战争类不应该提供给班在另一场战争,当他们打包成一个EAR。 大多数容器将严格执行这一点。
你应该把你希望共享成JAR,包括代码,当你想用战争的依赖。
在战争项目的pom.xml包括
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<attachClasses>true</attachClasses>
</configuration>
</plugin>
这将创建你的项目-0.0.1-快照clases.jar在目标文件夹与战争一起。
在依赖项目的pom.xml包括
<dependency>
<groupId>com.yourproject</groupId>
<artifactId>you-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>classes</classifier>
</dependency>
这为我工作。 希望能帮助到你。
编辑:如果我们想只有一些类文件放进瓶子里再加入这pom.xml的
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>make-a-jar</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>classifier_name</classifier>
<includes>
<include>com/../..</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
在依赖项目的pom.xml包括
<dependency>
<groupId>com.yourproject</groupId>
<artifactId>you-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<classifier>classifier_name</classifier>
</dependency>
注意:分类名称必须在这两个文件的pom.xml同