【问题标题】:Publishing locally with Gradle not working使用 Gradle 在本地发布不起作用
【发布时间】:2015-10-19 14:35:57
【问题描述】:

我的目录结构如下:

myapp/
    src/main/resources/
        <lots of code>
    build.gradle

以下build.gradle

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

group = 'net.myuser'

repositories {
    jcenter()
}

dependencies {
    compile(
        <dependencies here>
    )
}

jar {
    baseName = 'myapp'
}

task writePom << {
    pom {
        project {
            groupId group
            artifactId 'myapp'
            version version

            inceptionYear '2015'
            licenses {
                license {
                    name 'myapp'
                    distribution 'Blah blah blah'
                }
            }
        }
    }.writeTo("build/libs/pom.xml")
}

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
}

artifacts {
    archives(file("${buildDir}/libs/myapp-${version}.jar")) {
        name "myapp"
        classifier ""
    }
}

当我这样做时:

./gradlew clean build writePom install -Pversion=0.1.0

我遇到了两个问题:

  1. 在生成的build/libs/pom.xml 内部,groupId 显示为null;和
  2. 我在~/.gradle/caches/modules-2 下找不到net.myuser 目录,这告诉我install 不起作用

所以我问:我需要更改什么以使groupId 不为空,以及如何让install 发布以下所有内容:

  • 罐子
  • 来源 JAR
  • Javadoc JAR
  • pom.xml

【问题讨论】:

  • 你试过groupId project.group而不是groupId group吗?
  • 感谢@thokuest (+1) - 这解决了我的第一个问题(pom.xml 现在有正确的groupId 值),但工件仍未在该modules-2 目录下发布。有任何想法吗?!?再次感谢!

标签: java gradle publishing


【解决方案1】:

根据评论,使用groupId project.group 而不是groupId group 以正确设置&lt;groupId&gt;


关于install任务,请看Gradle Maven Plugin documentation

将关联的工件安装到本地 Maven 缓存,包括 Maven 元数据生成。

默认情况下,本地 Maven 缓存位于~/.m2/repository,因此您查看的位置错误。安装任务不会篡改~/.gradle/caches/modules-2,它(顾名思义)只是已解析依赖项的缓存。


通过使用 Maven 插件,Gradle 已经为您创建了一个 POM 文件。所以请检查您是否真的需要自定义writePom 任务。

另外,主要工件是自动安装的,所以这可能是多余的:

artifacts {
    archives(file("${buildDir}/libs/myapp-${version}.jar")) {
        name "myapp"
        classifier ""
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多