Gradleでソースjarを構築する方法


155

私は、gradleでビルドされたオープンソースプロジェクトで作業しています。IDE(IntelliJ IDEA)にロードしてプロジェクト全体をデバッグできる(project)-sources.jarファイルを生成したいと思います。生成できる場合は、ファイルをロードする方法を知っています。

私はプロジェクトで利用可能なgradleタスクを調べましたが、ソースjarファイルを生成するものはありません。

このプロジェクトのソースjarファイルを生成する最も簡単な方法は何ですか?

コンパイルされたクラスファイルを含むjarファイルにソースを追加しても問題ありません。

回答:


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

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}

4
私は素晴らしい答えとJavaプラグインを使用するGradleプロジェクトで動作するという私の仮定に基づいてこの答えを受け入れています。残念ながら、私が使用しているプロジェクトはJavaプラグインを使用していないため、私の場合は機能しません。表示されるエラーは、「タスク ':sourcesJar'でプロパティ 'sourceSets'が見つかりませんでした。」です。
ポールD.エデン

重要な場合、参照されるプロジェクトはhsqldb 2.2.8です。
ポールD.エデン

私の状況では、allSourceプロパティは.javaファイルを拾っていなかった、私は使用に私のsourcesJarタスクを変更する必要がありました:sourceSets.main.resources sourceSets.main.java、から
ダグ・エアーズ

5
私が間違っていないのであれば、クラスのdependsOn仕様も必要ありません。Gradleはタスクの入力を確認し、それらがどこから来たかを判断して、依存関係を自動的に作成します。たとえば、javadocJarはjavadocからファイルをプルするため、GradleはdependsOn javadocを自動的に追加します。
Mikezx6r 2013年

Android Studioで生成された.jarファイルを参照するにはどうすればよいですか?どこに置く必要がありますか?
JJD 2013年

54

Androidを使用している場合:

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

ここから


34

コンパイル済みクラスのJARファイルソース追加したい場合は、これも受け入れられると言っていれば、十分簡単に​​行うことができます。次のコードをビルドファイルに追加するだけです。理論的には、別のJARにソースを配置するためのソリューションに非常に似ていることがわかります。

 jar {
     from sourceSets.main.allSource
 }

違いは、sourcesJarの代わりに「jar」と言って、メインJARファイルに追加することです。


AndroidのGradleシステムで、「
org.gradle.api.Project

@iamreptar代わりにGiordano(次の回答の作成者)に聞いてください。私はAndroid開発者ではありません。stackoverflow.com/a/28969412/1480995
Michael Oryl 2016

31

Gradle 6.0以降のソリューション

Gradle 6.0以降でjava/ java-libraryプラグインを使用すると想定するとsourcesJar、次の設定を使用してタスクを取得できます。

java {
    withSourcesJar()
    // and/or analogously use “withJavadocJar()” to get a “javadocJar” task
}

さらにmaven-publish/ ivy-publishプラグイン(最近推奨)を使用する*-sources.jarと、メインのJavaパブリケーションとともにアーティファクトもパブリッシュされます。

Gradle docsも参照してください。


10

これはうまくいくはずです

assemble.dependsOn 'propertyJar'

task propertyJar(type: Jar) {
 archiveName = "myJarName.jar"
 from('src/main/resources') {
    include '**'
 }}

1
^このassemble.dependsOn部分では、このタスクが自動的に実行されます。
Jarekczek 2016

3

Kotlin DSLに相当するものは次のとおりです。

tasks {

    val sourcesJar by creating(Jar::class) {
        dependsOn(JavaPlugin.CLASSES_TASK_NAME)
        classifier = "sources"
        from(java.sourceSets["main"].allSource)
    }

    val javadocJar by creating(Jar::class) {
        dependsOn(JavaPlugin.JAVADOC_TASK_NAME)
        classifier = "javadoc"
        from(java.docsDir)
    }

    artifacts {
        add("archives", sourcesJar)
        add("archives", javadocJar)
    }
}

Gradleの5.0の下で私のために働いていない:Project."java"解決さにJavaPluginExtensionどの任意の提供していないsourceSetsdocsDirのプロパティを。
ベントラー2018

使ってみてくださいfrom(sourceSets["main"].allJava)
madhead 2018

変更from(javadoc)from(sourceSets["main"].allSource)
ジョバンニ・シルバ

また、kotlin DSLの方法については、回答をご覧ください:stackoverflow.com/a/60068986/2627884
amatkivskiy

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.