XDelphiGrl
XDelphiGrl

Reputation: 127

Is it possible to use classes compiled by Gradle buildSrc in main Groovy project?

Classes compiled by buildSrc/build.gradle are not resolved at runtime when they are used in main PROJECT classes.

My Groovy project structure looks like this:
-PROJECT
    -buildSrc/
        -build.gradle
        -/src/main/groovy
            - com.company.global.test.report
    -src/test/groovy
    -build.gradle

Is there something I can add to the top-level PROJECT/build.gradle to allow the classes compiled by it to use the classes compiled by buildSrc/build.gradle?

Upvotes: 6

Views: 3648

Answers (2)

Konrad Jamrozik
Konrad Jamrozik

Reputation: 3556

Here is how to do it with Gradle 2.12:

In your_project/buildSrc/build.gradle

task sourcesJar(type: Jar, dependsOn: classes) {
  classifier = 'sources'
  from sourceSets.main.allSource
}

// Thanks to this, IDE like IntelliJ will provide you with "Navigate to sources"
artifacts {
  archives sourcesJar
}

In your_project/build.gradle

ext.buildSrcJars = fileTree("$rootDir/buildSrc/build/libs") { include("*.jar") exclude("*sources.jar")}

// Works in every subproject
dependencies {
    compile buildSrcJars
}

Upvotes: 2

Peter Niederwieser
Peter Niederwieser

Reputation: 123910

buildSrc is its own build (not project) that gets executed before the main build. Its sole purpose is to make some classes (plugins, tasks, regular classes) available to the build scripts of the main build. Hence you could call it a "meta-build".

Technically, it would be possible to add the compiled classes of buildSrc to the compile or runtime class path of a project in the main build, but I don't recommend to do it. There is very likely a better way to achieve your goals (but I don't know what those are).

Upvotes: 4

Related Questions