如何在Maven项目中导入非Maven项目编译生成WAR中的类?
解决Maven项目导入非Maven WAR包中类的问题
给你几个可行的解决办法,按需选择:
方法一:提取WAR中的class文件打包成JAR,作为本地依赖
- 把原项目生成的WAR文件解压,找到
WEB-INF/classes目录——这里面就是原项目编译后的所有class文件 - 把
classes目录下的内容直接打包成JAR文件(比如命名成original-project-api.jar),放到你的Maven项目的lib目录下(没有就新建一个) - 在你的Maven项目的
pom.xml里添加这个本地依赖:
<dependency> <groupId>com.yourcompany</groupId> <!-- 自定义和原项目匹配的groupId --> <artifactId>original-project-api</artifactId> <!-- 自定义artifactId --> <version>1.0.0</version> <!-- 自定义版本号 --> <scope>system</scope> <systemPath>${project.basedir}/lib/original-project-api.jar</systemPath> <!-- 对应JAR的存放路径 --> </dependency>
- 要是用TeamCity自动构建,记得把这个JAR提交到代码仓库,或者在构建脚本里加个步骤自动从WAR里提取并打包(比如用Ant脚本或者Maven插件做这件事)
方法二:用Maven插件直接从WAR中提取class文件
如果不想手动打包JAR,可以直接让Maven在构建时自动处理WAR包:
- 先在
pom.xml里添加对原WAR包的依赖:
<dependency> <groupId>com.yourcompany</groupId> <artifactId>original-project</artifactId> <version>1.0.0</version> <type>war</type> <scope>compile</scope> </dependency>
- 再配置
maven-dependency-plugin,让它在构建时把WAR里WEB-INF/classes下的class文件解压到当前项目的编译目录:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>unpack-war-classes</id> <phase>process-resources</phase> <goals> <goal>unpack</goal> </goals> <configuration> <artifactItems> <artifactItem> <groupId>com.yourcompany</groupId> <artifactId>original-project</artifactId> <version>1.0.0</version> <type>war</type> <outputDirectory>${project.build.directory}/classes</outputDirectory> <includes>WEB-INF/classes/**/*.class</includes> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
这样Maven编译时就能自动找到需要的包和类了。
方法三:把原非Maven项目转为Maven(长期最优方案)
如果后续还要频繁更新或维护,建议直接把原项目改成Maven结构:
- 给原项目加个
pom.xml,配置好对应的groupId、artifactId、version,以及它的依赖 - 用Maven编译后发布到公司的私有Maven仓库
- 你的测试项目直接在
pom.xml里添加对原项目artifact的依赖就行,不用再折腾WAR包的事
内容的提问来源于stack exchange,提问作者Maxime Alza
相关产品推荐
相关产品推荐

