一个大的maven 项目,结构是一个根pom,下面几个小的module,包括了appservice-darc,appservice-entity等,其中appservice-darc 依赖了 appservice-entity。java
可是呢,对根项目的pom, 执行mvn clean complie 是没问题的,可是对 appservice-darc 执行 mvn clean complie是不行的,出现下面错误:api
[INFO] ------------------------------------------------------------------------ [INFO] Building appservice-darc 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [WARNING] The POM for com.worepay:appservice-entity:jar:0.0.1-SNAPSHOT is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ appservice- --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 4 resources [INFO] Copying 2 resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ appservice- --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 10 source files to F:\dev\SVN\GYF\newAppservice\appservice-\target\classes [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[3,25] 程序包javax.persistence不存在 [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[4,25] 程序包javax.persistence不存在 [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[5,25] 程序包javax.persistence不存在 [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[8,2] 找不到符号 符号: 类 Table [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[12,10] 找不到符号 符号: 类 Id 位置: 类 com.worepay.appservice..Banner [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[13,10] 找不到符号 符号: 类 Column 位置: 类 com.worepay.appservice..Banner [ERROR] /F:/dev/SVN/GYF/newAppservice/src/main/java/com/worepay/appservice//Banner.java:[17,10] 找不到符号 符号: 类 Column
IDEA中项目源码中是没有错误的,说明编译是ok的,可是执行maven compile 就是不行。。 检查发现 persistence-api-1.0.jar 依赖也确实是存在的。可是为何mvn操做就老是不行呢?oracle
appservice-darc 依赖了 appservice-entity,而从上面的日志看, appservice-entity好像有什么问题。。 pom 为何是 invalid ? 打开pom 是没用任何错误提示的呢, 那就奇怪了。。app
后面经过maven 调试发现(添加 -X 参数 ),发现appservice-entity确实仍是有问题的。缘由是appservice-entity 的pom 引用了一个本地的jar,它的写法是 相对路径,从而致使appservice-entity 所依赖的全部jar都不可用了,以下:maven
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.0.1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/ojdbc14_g.jar</systemPath> </dependency>
从而,maven compile 失败了。 怎么解决呢? 提示告诉我,须要写成绝对路径的形式。 把那个本地jar 的地址改成绝对路径就行了:ui
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.0.1.0</version> <scope>system</scope> <systemPath>F:/dev/SVN/GYF/rxw/newAppservice/appservice-entity/lib/ojdbc14_g.jar</systemPath> </dependency>
不过,发现 还行须要先把appservice-entity 先install,不install 还不行。我开始就是compile了一下,觉得都在一个项目了, 应该不至于那么傻,引用不到吧。结果还真是,仍是报以前同样的错误。后面只有乖乖的install 一下,结果就行了。spa
观察发现,appservice-darc 是从本地maven 仓库中去获取appservice-entity 的jar , 由于单单是maven compile,不能要保证本地仓库中的appservice-entity 已是最新的,是没用的。若是事先对appservice-entity执行clean compile,那么clean 操做会清除本地仓库对应的 jar, 因此本地仓库中的appservice-entity 是不存在的,仅仅存在于当前项目的target目录。debug