Gradle多项目构建命令失败,但对子项目正常工作

时间:2016-08-06 02:03:12

标签: java gradle spring-boot

我完全被一个不应该发生的编译错误package sg.ncl.service.authentication.data.jpa does not exist所愚蠢。

我有一个Gradle多项目,我正在尝试更新到Spring Boot 1.4.0。 存储库位于https://github.com/nus-ncl/services-in-one/tree/DEV-483

更新:1 : 每当我使用以下任何命令时:

./gradlew clean build
./gradlew clean assemble check
./gradlew clean assemble test

他们会导致以下错误。

D:\git\services-in-one\service-registration\src\test\java\sg\ncl\service\registration\logic\RegistrationServiceTest.java:16: error: package sg.ncl.service.authentication.data.jpa does not exist
import sg.ncl.service.authentication.data.jpa.CredentialsEntity;
                                         ^
D:\git\services-in-one\service-registration\src\test\java\sg\ncl\service\registration\Util.java:4: error: package sg.ncl.service.authentication.data.jpa does not exist
import sg.ncl.service.authentication.data.jpa.CredentialsEntity;
                                         ^
D:\git\services-in-one\service-registration\src\test\java\sg\ncl\service\registration\Util.java:120: error: cannot find symbol
    public static CredentialsEntity getCredentialsEntity() {
              ^
  symbol:   class CredentialsEntity
  location: class Util
D:\git\services-in-one\service-registration\src\test\java\sg\ncl\service\registration\Util.java:127: error: cannot find symbol
    public static CredentialsEntity getInvalidCredentialsEntity() {
              ^
  symbol:   class CredentialsEntity
  location: class Util
D:\git\services-in-one\service-registration\src\test\java\sg\ncl\service\registration\web\RegistrationControllerTest.java:22: error: package sg.ncl.service.authentication.data.jpa does not exist
import sg.ncl.service.authentication.data.jpa.CredentialsEntity;
                                         ^
5 errors
:service-registration:compileTestJava FAILED

但是当我使用以下任何命令时,不会发生编译错误。

./gradlew clean :service-registration:build
./gradlew clean :service-registration:compileTestJava
./gradlew clean compileTestJava
./gradlew clean check

更新2 :有趣的是,如果我使用./gradlew :service-registration:build build,则没有错误。

我意识到我无法想出一个简单的例子并为此带来的不便表示道歉。但是,如果我能解决这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:4)

从Boot 1.4开始,可执行jar文件在BOOT-INF/classes中存储已编译的类。这意味着只需将jar添加到类路径中就无法访问它们。您将模块打包为可执行jar文件,并尝试将其用作依赖项。当您将其用作依赖项时,其jar将添加到类路径中。如果jar已重新打包到可执行存档中,则其类不可见,并且编译失败。

最简单的改变是禁用项目jar的重新打包:

bootRepackage {
    enabled = false
}