使用Gradle将Java构件发布到Maven本地库

94

当我试图将生成的jar文件安装到本地Maven仓库时,遇到了问题。错误信息显示“未找到任务'publish'”。

我正在使用以下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

15
尝试运行命令 gradle publishToMavenLocal,该命令将把项目发布到本地的 Maven 仓库。 - RaGe
2
在早期阶段,“gradle install” 完全可以正常工作... - AdamSkywalker
4
@AdamSkywalkerжҢҮзҡ„жҳҜзҺ°еңЁе·Із»Ҹиў«ејғз”Ёзҡ„mavenжҸ’件гҖӮmaven-publishжҸ’件еңЁжҹҗдәӣж–№йқўиҝӣиЎҢдәҶжӣҙж”№гҖӮ - RaGe
6
如果你有特别强烈的习惯,你可以添加task install(dependsOn: publishToMavenLocal) - Eric Wendelin
1
为什么不使用apply plugin:'maven'gradle install - Alex78191
显示剩余3条评论
5个回答

148

将构件发布到本地 Maven 的正确任务是:

gradle publishToMavenLocal

2
这实际上不是我想要的方式。该构件应该放置在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中。 - Vinayak Dornala
2
@VinayakDornala 请参阅 https://dev59.com/JlsW5IYBdhLWcg3wDzku - Gab
6
我想补充一下,有时候当我直接从命令行发布时,自定义版本号会比较有帮助。你可以通过添加 -Pversion=<任何值> 来实现自定义版本号。例如,执行命令 gradle publishToMavenLocal -Pversion=SNAP 可以将版本号设置为 "SNAP"。 - Sammaron

10

本地检查 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

位置

工件将被添加到.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(而不是shared.gradle)相关的路径path

[iOS CocoaPod local]


6
这是一个针对Java 17和Gradle 7.5.1的备用框架: build.gradle文件:
plugins {
    id 'org.gradle.java'
    id 'org.gradle.maven-publish'
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
    withJavadocJar()
    withSourcesJar()
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId = 'your-group'
            artifactId = 'your-artifact'
            version = "0.0.1"
            from components.java
        }
    }
    repositories {
        mavenLocal()
    }
}

发布

您可以使用--info查看更多有关发布步骤的详细信息。

./gradlew --info publishToMavenLocal

Output Directory

Linux/macOS

/Users/<username>/.m2/repository/your-group/your-artifact/0.0.1

Windows

C:\Users\<username>\.m2\repository\your-group\your-artifact\0.0.1

只有执行这一步才能生效:发布 { 出版物 { mavenJava(MavenPublication) { groupId = 'your-group' artifactId = 'your-artifact' version = "0.0.1" from components.java } } ... 谢谢! - Pavlo Chechehov

5
这是我使用 Kotlin DSL(build.gradle.kts)为我的Android库完成的方法:
plugins {
    id("maven-publish")
    // OR simply
    // `maven-publish`

    // ... (other plugins)
}

publishing {
    repositories {
        // Local repository which we can first publish in it to check artifacts
        maven {
            name = "LocalTestRepo"
            url = uri("file://${buildDir}/local-repository")
        }
    }
    publications {
        // ...
    }
}

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

或者只用这个命令发布单个出版物:

./gradlew publishReleasePublicationToLocalTestRepoRepository

欲了解更多信息,请参阅Gradle文档:Maven发布插件


2
maven插件 添加到您的项目中,然后运行以下命令: gradle clean install

你需要安装插件才能获得“安装”吗? - blogbydev
不是的。你可以像 @Eric Wendelin 在其中一个评论中提到的那样去做。 - thisisshantzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接