Gradle: Externe Abhängigkeiten einschließen?

Diskutiere Gradle: Externe Abhängigkeiten einschließen? im IDEs und Tools Bereich.
T

temi

Hallo zusammen,

ich blicke (wieder einmal) bei Gradle nicht durch. Ich möchte eine kleine Java-Library erstellen. Diese nutzt logback als Dependency. Diese Bibliothek möchte ich in ein lokales Verzeichnis exportieren, damit ich sie in einem anderen Java-Projekt wieder mittels Gradle einbinden kann. Das funktioniert im Prinzip auch, aber offenbar wird die Abhängigkeit zu logback nicht mit exportiert, denn mein Testprojekt, dass die Bibliothek verwenden soll, meldet den Fehler, dass slf4j nicht gefunden wird.

Ich dachte das so etwas über die Angaben unter "dependencies" gesteuert wird, hier also "implementation" und "testImplementation". Anscheinend reicht das aber nicht aus. Ich habe jetzt gelesen, das es noch die Angabe "api" gibt, aber das dient wohl dazu die Abhängigkeit dem Nutzer der Bibliothek ebenfalls zu veröffentlichen. Ich möchte sie (hier) aber nur innerhalb der Bibliothek nutzen.

Kann mir da mal jemand helfend unter die Arme greifen?

Code:
plugins {
    id 'java-library'
}

group 'de.xxx'
version '0.1'

repositories {
    mavenCentral()
}

dependencies {
    implementation "ch.qos.logback:logback-classic:1.2.3"
    testImplementation "org.junit.platform:junit-platform-runner:1.6.2"
    testImplementation "org.junit.jupiter:junit-jupiter-engine:5.6.2"
    testImplementation "org.junit.vintage:junit-vintage-engine:5.6.2"
}

test {
    useJUnitPlatform()
}

uploadArchives {
    repositories {
        flatDir {
            dirs "/.../.gradle/artifacts/"
        }
    }
}
 
looparda

looparda

Ich fürchte du musst über ein lokales Repository gehen, damit das mit den Abhängigkeiten klappt. Jedenfalls konnte ich es so hinfrickeln, dass es funktioniert. Kommt das für dich infrage?

producer
Code:
plugins {
    id 'java-library'
    id 'maven'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

group 'de.xxx'
version '0.1'


repositories {
    mavenCentral()
    maven { url "${rootProject.file("/.gradle/repo/").toURL()}" }
}

dependencies {
    compile ('org.slf4j:slf4j-api:1.7.30')
    implementation ("ch.qos.logback:logback-classic:1.2.3")
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: rootProject.file(".gradle/repo/").toURL() )
        }
    }
}
consumer
Code:
plugins {
    id 'java'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

group 'de.xxx'
version '0.1'


repositories {
    mavenCentral()
    maven { url "${rootProject.file("/.gradle/repo/").toURL()}" }
}

dependencies {
    implementation 'de.xxx:producer:0.1'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
 
Zuletzt bearbeitet:
T

temi

Vielen Dank an @looparda für die Anregung mit dem lokalen Maven Repository. Ich habe es jetzt so gemacht:
Code:
plugins {
    id 'java-library'
    id 'maven-publish'
}

group 'de.xxx'
version '0.1'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'ch.qos.logback:logback-classic:1.2.3'
    testImplementation 'org.junit.platform:junit-platform-runner:1.6.2'
    testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.6.2'
    testImplementation 'org.junit.vintage:junit-vintage-engine:5.6.2'
}

test {
    useJUnitPlatform()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}
Der passenden Gradle-Task ist dann publishToMavenLocal

Im Consumer reicht dann:
Code:
repositories {
    mavenCentral()
    mavenLocal()
}

Damit komme ich zurecht. Notfalls kann man den Ort von MavenLocal ja noch anpassen.
 
looparda

looparda

Oops, ja das ist der Task, den ich auch benutzt habe - hatte ich vergessen dazuzuschreiben. Klar kannst du auch das lokale Maven Repo nehmen, das vereinfacht das ganze. Ich dachte nur du willst es eben nicht benutzen sondern ein temporäres erstellen - deshalb die Tricksereien mit den Pfaden.
 
T

temi

Oops, ja das ist der Task, den ich auch benutzt habe - hatte ich vergessen dazuzuschreiben. Klar kannst du auch das lokale Maven Repo nehmen, das vereinfacht das ganze. Ich dachte nur du willst es eben nicht benutzen sondern ein temporäres erstellen - deshalb die Tricksereien mit den Pfaden.
Ich habe es inzwischen auch noch mal geändert. So schaut es jetzt (ausschnittsweise) aus:
Code:
publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }

    repositories {
        maven {
            url 'file://home/.../Java/.m2/'
        }
    }
}
Das funktioniert dann mit dem Task "publish".
 
Thema: 

Gradle: Externe Abhängigkeiten einschließen?

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben