为什么“jar.enabled = false”会影响 Gradle 中的依赖项?

Nik*_*lev 1 multi-project gradle

故事:我最近发现jar.enabled = false在多项目 Gradle 项目的项目 b-features 中设置将阻止同一项目的项目 a-features 能够通过以下方式引用 B

dependencies {
    compile project(':b-features')
}
Run Code Online (Sandbox Code Playgroud)

问题:为什么jar.enabled = false阻止项目 A 成功引用项目 B?

附加信息:

根项目的 build.gradle:

group 'gradle.studies'
apply plugin: 'java'
...
Run Code Online (Sandbox Code Playgroud)

根项目的settings.gradle:

rootProject.name = 'multi-project-reference'
include 'a-features'
include 'b-features'
Run Code Online (Sandbox Code Playgroud)

项目的 build.gradle a-features

group 'gradle.studies'
apply plugin: 'java'
...
dependencies {
    compile project(':b-features')
}
...
Run Code Online (Sandbox Code Playgroud)

项目的build.gradle b-features

group 'gradle.studies'   
apply plugin: 'java'    
jar.enabled = false    
...
Run Code Online (Sandbox Code Playgroud)

a-features项目A类:

package outerproject;

import innerproject.B;

public class A {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.getMsg());
    }
}
Run Code Online (Sandbox Code Playgroud)

b-features项目B类:

package innerproject;
public class B {

    public B() {
        this.msg = "Hello World";
    }

    private String msg;

    public String getMsg() {
        return msg;
    }
    //...
}
Run Code Online (Sandbox Code Playgroud)

错误:

14:27:50: Executing external task 'build'...
:compileJava NO-SOURCE :processResources NO-SOURCE :classes UP-TO-DATE
:jar UP-TO-DATE :assemble UP-TO-DATE :compileTestJava NO-SOURCE
:processTestResources NO-SOURCE :testClasses UP-TO-DATE :test
NO-SOURCE :check UP-TO-DATE :build UP-TO-DATE :b-features:compileJava
UP-TO-DATE :b-features:processResources NO-SOURCE :b-features:classes
UP-TO-DATE :b-features:jar SKIPPED
/home/nikita/IdeaProjects/multi-project-reference/a-features/src/main/java/outerproject/A.java:3:
error: package innerproject does not exist import innerproject.B;
                   ^ /home/nikita/IdeaProjects/multi-project-reference/a-features/src/main/java/outerproject/A.java:7:
error: cannot find symbol
        B b = new B();
        ^   symbol:   class B   location: class A /home/nikita/IdeaProjects/multi-project-reference/a-features/src/main/java/outerproject/A.java:7:
error: cannot find symbol
        B b = new B();
                  ^   symbol:   class B   location: class A 3 errors :a-features:compileJava FAILED

FAILURE: Build failed with an exception.
Run Code Online (Sandbox Code Playgroud)

Vam*_*ire 5

您实际依赖的是项目生成的工件(JAR 文件)。当您禁用工件(jar任务)的生成时,当然不再找到所需的类。