使用gradle发布工件(使用源代码和javadoc)

使用gradle发布工件(使用源代码和javadoc),java,gradle,Java,Gradle,我试图创建一个gradle文件来发布我的工件(.jar,sources.jar和javadoc.jar) 到目前为止,我已经能够编写这个gradle文件: plugins { id 'java' id 'eclipse' id 'maven-publish' id 'net.nemerosa.versioning' version '2.5.1' } targetCompatibility = 1.8 eclipse { project {

我试图创建一个gradle文件来发布我的工件(
.jar
sources.jar
javadoc.jar

到目前为止,我已经能够编写这个gradle文件:

plugins {
    id 'java'
    id 'eclipse'
    id 'maven-publish'
    id 'net.nemerosa.versioning' version '2.5.1'
}

targetCompatibility = 1.8

eclipse {
    project {
        name = 'OAuthz Library'
        natures 'org.eclipse.buildship.core.gradleprojectnature'
    }
    classpath {
        downloadSources = true
        downloadJavadoc = true

        defaultOutputDir = file('build-eclipse')
    }
    jdt {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile 'javax.servlet:javax.servlet-api:3.1.0'
    compile 'org.codehaus.jettison:jettison:1.3.7'
    compile 'org.apache.directory.api:api-all:1.0.0-M30'
    compile 'com.whalin:Memcached-Java-Client:3.0.2'
    compile group: 'org.mongodb', name: 'mongo-java-driver', version: '2.14.3'
    compile 'commons-configuration:commons-configuration:1.10'
}

group = 'com.living'
version = versioning.info.display

manifest {
    attributes 'Implementation-Title': 'OAuthz Library'
}

publishing {
    publications {
        mavenJava(MavenPublication) {

        }
    }
    repositories {
        maven {
            credentials {
                username 'user'
                password 'passwd'
            }
            url "$url"
        }
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.1'
}
我已经能够在存储库上发布我的包,但是:

  • 发布的包告诉我它没有依赖项
  • 我想发布源代码和java文档工件
  • 有什么想法吗?

    1)您包括一个发布块,但不包括任何工件。这样只会创建一个pom。您需要在发布定义中包含来自components.java的

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java 
            }
        }
    ...
    
    2) 您需要首先创建工件:

    task sourcesJar(type: Jar, dependsOn: classes) {
        classifier = 'sources'
        from sourceSets.main.allSource
    }
    
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }
    
    然后将工件包括到出版物中:

    publishing {
        publications {
            mavenJava(MavenPublication) {
                from components.java
                artifact sourcesJar
                artifact javadocJar
            }
        }
    ...
    
    我使用

    如果您不想使用这些插件,可以使用


    有关源代码和javadoc Publishing的信息,请参阅。本文仅与如何生成工件相关。不过,我已经看到了这一点,我不太清楚如何在我的maven存储库中发布它们。那么“普通”jar工件呢?与之相比,我认为还有一些事情需要设置,我已经看过这本手册了。尽管如此,我还不知道还有什么剩余。谢谢@blackbuild。我不太明白什么是
    组件。java
    指的是。。。正如您所看到的,我在脚本中将其留空。@Jordi Its说使用组件名java。这个插件由java插件自动定义,默认情况下包括main/java/中的所有类。对于War项目,这将是
    components.web
    。现在它告诉我这样一条消息:
    执行模型规则时引发异常:PublishingPlugin.Rules#publishing(ExtensionContainer)>在发布容器上找不到参数[task]:sourcesJar']的方法工件()
    
    plugins {
        id 'nebula.javadoc-jar' version '4.4.4'
        id 'nebula.source-jar' version '4.4.4'
    }
    
    tasks.create('sourceJar', Jar) {
        dependsOn tasks.classes
        from sourceSets.main.allSource
        classifier 'sources'
        extension 'jar'
        group 'build'
    }
    publishing {
        publications {
            nebula(MavenPublication) { // if maven-publish is applied
                artifact tasks.sourceJar
            }
            nebulaIvy(IvyPublication) { // if ivy-publish is applied
                artifact tasks.sourceJar
            }
       }
    }