【问题标题】:Publish Java artifact to Maven Local with Gradle使用 Gradle 将 Java 工件发布到 Maven Local
【发布时间】:2016-05-07 18:52:28
【问题描述】:

我在尝试将生成的 jar 安装到本地 Maven 存储库时遇到问题。消息错误只是显示“找不到任务'发布''

我正在使用这个 Gradle 脚本:

buildscript {
    ext {
        springBootVersion = '1.3.2.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'maven-publish'

jar {
    baseName = 'mongofoundry'
    version = '1.0.0'
}
sourceCompatibility = 1.7
targetCompatibility = 1.7


repositories {
    mavenCentral()
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-data-mongodb')
    testCompile('org.springframework.boot:spring-boot-starter-test') 
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
        }
    }
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.9'
}

您知道为什么我会阅读该错误消息吗? 谢谢。

更新

按照@RaGe 所述运行命令,解决了问题:

gradle publishToMavenLocal.

【问题讨论】:

  • 试试gradle publishToMavenLocal
  • 在早期,“gradle install”工作得很好......
  • @AdamSkywalker 与现已弃用的 maven 插件一起使用。 maven-publish 改变了一些东西。
  • 有特别强烈的习惯可以加task install(dependsOn: publishToMavenLocal)
  • 为什么不使用apply plugin: 'maven'gradle install

标签: maven gradle publish artifact maven-publish


【解决方案1】:

将工件发布到本地 maven 的正确任务是

gradle publishToMavenLocal

【讨论】:

  • 这实际上并不像我想要的那样工作。工件应该放在 C:\Users\XXXX\.gradle\caches\modules-2\files-2.1\cdb-webservices-spring-boot-starter 但它放在 C:\Users\XXXX\.m2 \repository\cdb-webservices-spring-boot-starter\cdb-webservices-spring-boot-starter\
  • 我只是想补充一点,有时我发现在直接从命令行发布时自定义版本号很有帮助——您可以通过添加-Pversion=<whatever> 来做到这一点。即gradle publishToMavenLocal -Pversion=SNAP
【解决方案2】:

在本地检查 Maven

对于开发和测试,在本地检查库很有用

gradle 设置为apply plugin: 'com.android.library' 而不是apply plugin: 'java-library'(默认情况下可以使用)

apply plugin: 'maven-publish'

//simple settings
project.afterEvaluate {
    publishing {
        publications {
            library(MavenPublication) {
                //setGroupId groupId
                setGroupId "com.company"
                //setArtifactId artifactId
                setArtifactId "HelloWorld"
                version "1.1"

                artifact bundleDebugAar

/* add a dependency into generated .pom file
                pom.withXml {
                    def dependenciesNode = asNode().appendNode('dependencies')
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', 'com.company')
                    dependencyNode.appendNode('artifactId', 'HelloWorld-core')
                    dependencyNode.appendNode('version', '1.1')

                }
*/
            }
        }
    }
}

使用命令行运行它或在Gradle选项卡中找到此命令

./gradlew publishToMavenLocal

位置

artefact 将被添加到.m2 文件夹中

//Unix
~/.m2

//Windows
C:\Users\<username>\.m2

//For example
/Users/alex/.m2/repository/<library_path>/<version>/<name>.<extension>

build 文件夹

<project_path>/build/outputs/<extension>

其他仓库位置

~/.gradle/caches/modules-2/files-2.1/<group_id>/<artifact_id>/<version>/<id>

//For example
/Users/alex/.gradle/caches/modules-2/files-2.1/com.company/HelloWorld/1.1/c84ac8bc425dcae087c8abbc9ecdc27fafbb664a

要使用它,请添加mavenLocal()。重要的是把它作为优先级的第一项,这对内部依赖很有用

buildscript {
    repositories {
        mavenLocal()
    }

allprojects {
    repositories {
        mavenLocal()
    }
}

dependencies {
    implementation 'com.company:HelloWorld:+'
}

*另外请记住,如果您使用一种shared.gradle 文件(通过apply from),您应该设置与project.gradle 相关的path不是 @ 987654339@)

[iOS CocoaPod local]

【讨论】:

    【解决方案3】:

    maven plugin 添加到您的项目中,然后: gradle clean install

    【讨论】:

    • 是否需要安装插件才能“安装”
    • 没有。您可以按照@Eric Wendelin 在其中一个问题中提出的建议。
    【解决方案4】:

    这就是我对my Android library 使用 Kotlin DSL (build.gradle.kts) 的方式:

    plugins {
        id("maven-publish")
        // OR simply
        // `maven-publish`
        // ...
    }
    
    publishing {
        repositories {
            // Local repository which can be published to first to check artifacts
            maven {
                name = "LocalTestRepo"
                url = uri("file://${buildDir}/local-repository")
            }
        }
        publications {
            // ...
        }
    }
    

    您可以使用以下命令创建所有出版物:

    ./gradlew publishAllPublicationsToLocalTestRepoRepository
    

    或使用此命令仅发布单个出版物:

    ./gradlew publishReleasePublicationToLocalTestRepoRepository
    

    更多信息请参见Gradle documentations: Maven Publish Plugin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2016-05-30
      • 2020-05-13
      • 2013-12-06
      • 2016-03-24
      相关资源
      最近更新 更多