You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java项目中调用其他Java项目?附依赖引入编译报错问题

解决WAR包作为依赖引入导致的编译错误问题

这个问题我之前也踩过坑,核心原因是你把WAR包当成依赖库来引入了——WAR是Web应用的部署包,它的目录结构和用于编译依赖的JAR包完全不同,Maven的system依赖根本没法正确解析WAR里的编译类文件,自然会找不到Hello类。另外你的代码里Hello hel - new Hell();还有拼写错误,应该是Hello hel = new Hello();,这也可能触发编译报错。

下面给你几个可行的解决方案,按优先级排序:

1. 最优方案:将项目1打包为JAR包(推荐)

WAR包是给Web容器部署用的,而作为依赖库,JAR才是正确的格式。你可以这么改:

  • 打开项目1的pom.xml,确认<packaging>标签的值是jar(如果之前设成了war,改成jar即可,默认不写的话就是jar)
  • 在项目1的根目录执行Maven命令打包:
    mvn clean package
    
  • 把生成的java1-0.0.1-SNAPSHOT.jar文件复制到项目2的lib目录
  • 修改项目2的pom.xml,把原来的system依赖改成普通依赖(如果把项目1安装到本地仓库,连lib目录都不用放):
    <dependency>
        <groupId>com.test</groupId>
        <artifactId>java1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    
    更规范的做法是在项目1执行mvn install,把jar包安装到本地Maven仓库,这样项目2直接引入上述依赖即可,无需手动复制文件。

2. 临时方案:从WAR包中提取类文件打包成JAR

如果暂时没法修改项目1的打包方式,可以手动处理WAR包:

  • 解压项目1的java1-0.0.1-SNAPSHOT.war文件,找到WEB-INF/classes目录(这里面就是项目1编译后的所有类文件,包括com/test/java1/Hello.class)
  • 把classes目录下的所有内容打包成一个新的JAR包(比如命名为java1-0.0.1-SNAPSHOT.jar)
  • 替换项目2lib目录里的WAR包为这个新JAR包,同时修改项目2pom.xml里的systemPath指向这个JAR包:
    <systemPath>${basedir}/lib/java1-0.0.1-SNAPSHOT.jar</systemPath>
    

3. 额外注意事项

  • 尽量避免使用system scope的依赖,它不参与Maven的依赖传递,而且换环境时容易因为文件路径问题报错,非常不灵活
  • 检查项目2的Test类里是否正确导入了Hello类:
    import com.test.java1.Hello; // 必须写对包路径
    

内容的提问来源于stack exchange,提问作者user1365697

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:22:43