【问题标题】:Publishing artifacts(with sources and javadoc) with gradle使用 gradle 发布工件(带有源代码和 javadoc)
【发布时间】:2017-01-24 20:49:55
【问题描述】:

我正在尝试创建一个 gradle 文件以发布我的工件(.jarsources.jarjavadoc.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'
}

不过,我已经能够在存储库上发布我的包:

  1. 已发布的包告诉我它没有依赖项。
  2. 我想发布源代码和 Java 文档工件。

有什么想法吗?

【问题讨论】:

  • 参见stackoverflow.com/questions/21904269/… 获取源代码和 javadoc 发布
  • 这篇文章只与如何生成工件有关。我已经看到了,不过,我还不太清楚如何在我的 maven 存储库上发布它们。那么“正常”的 jar 工件呢?
  • manual相比,我觉得还有一些地方需要设置
  • 我已经看过这本手册了。不过,我还不太清楚还剩下什么。

标签: java gradle


【解决方案1】:

1) 您包含一个发布块,但不包含任何工件。这样只会创建一个 pom。您需要在发布定义中包含from 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
        }
    }
...

【讨论】:

  • 感谢@blackbuild。我不太明白components.java 指的是什么...如您所见,我在脚本上将其留空。
  • @Jordi 它说要使用组件名称 java。这个是由 java 插件自动定义的,包括所有从 main/java / 默认分类的)。对于战争项目,这将是components.web
  • 现在我收到了这条消息:Exception thrown while executing model rule: PublishingPlugin.Rules#publishing(ExtensionContainer) > Could not find method artifact() for arguments [task ':sourcesJar'] on Publication container.
【解决方案2】:

我使用nebula-publishing-plugin

plugins {
    id 'nebula.javadoc-jar' version '4.4.4'
    id 'nebula.source-jar' version '4.4.4'
}

如果你不想使用这些插件,你可以使用the docs的代码

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
        }
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    • 2023-03-20
    • 2013-06-03
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多