使用Gradle的maven-publish插件发布快照

我最近与Gradle一起开始了一个新项目 ,并决定直接参加–没有Gradle经验,没有关于Groovy的线索,没有教程,只是继续尝试直到可行。 在我决定使用孵化式maven-publish插件将快照发布到Sonatype的Maven快照存储库之前,这一切进展得令人惊奇,这确实令人信服。

警告:正如我说的那样,我在Groovy和Gradle中都是菜鸟,所以不要相信我所说的话。 我为您写下来的一切。

最后(但仍是部分的)的build.gradle文件可以找到这里 ,我在我的项目中使用的实际变异这里 。

第一步,确保存在项目的组,ID和版本。 通常可以在build.gradle文件中找到第一个和最后一个,项目名称的ID会加倍,并在settings.gradle中定义。

激活

好了,走吧! 首先,我激活了插件:

apply plugin: 'maven-publish'

要开始发布内容,我需要以下内容:

publishing {publications {mavenJava(MavenPublication) {from components.java// more goes in here}}repositories {mavenLocal()}
}

如您所见,我首先发布到本地仓库。 事实上,运行gradle publish现在应该创建一个JAR,并在一些一个基本POM。 m2个子文件夹。 从这里开始,我可以逐步添加更多功能。

填充POM

发布工件需要什么? 完整的Maven pom。 由于我没有pom.xml ,我在哪里可以得到它? 我用一些Gradle XML API创建它。 明显。 为什么不使用Maven直接获得pom? 如果我知道该死的...

因此,在mavenJava里面mavenJava东西(这是什么?我想是一个任务?),我创建了pom。 在解决以下语法之前,我花了一些时间尝试这种方式:

pom.withXml {asNode().with {appendNode('packaging', 'jar')appendNode('name', 'PROJECT_NAME')appendNode('description', 'PROJECT_DESCRIPTION')appendNode('url', 'PROJECT_URL')appendNode('scm').with {appendNode('url', 'SCM_URL_FOR_PEOPLE')appendNode('connection', 'SCM_URL_FOR_SCM')}appendNode('issueManagement').with {appendNode('url', 'ISSUE_TRACKER_URL')appendNode('system', 'ISSUE_TRACKER_NAME')}appendNode('licenses').with {appendNode('license').with {appendNode('name', 'LICENSE_NAME')appendNode('url', 'LICENSE_URL')}}appendNode('organization').with {appendNode('name', 'ORG_NAME')appendNode('url', 'ORG_URL')}appendNode('developers').with {appendNode('developer').with {appendNode('id', 'DEV_HANDLE')appendNode('name', 'DEV_NAME')appendNode('email', 'DEV_MAIL')appendNode('organization', 'ORG_NAME_AGAIN')appendNode('organizationUrl', 'ORG_URL_AGAIN')appendNode('timezone', 'UTC_OFFSET')}}}
}

好,我们去。 比丑陋的XML好得多,对吧? 我在某处读到有更多美丽的API可以在这里使用,但我不想离开另一个切线。 随意提出一些建议。

您可能已经注意到,无需重复项目组,ID和版本。 现在,运行gradle publish应该发布带​​有完整的pom的JAR,尽管它有点丑陋。

许可及更多

我想将项目的许可证添加到JAR的META-INF文件夹中,因此在mavenJava我告诉Gradle在每个JAR任务中都包含该文件(或者至少是我阅读的方式):

tasks.withType(Jar) {from(project.projectDir) {include 'LICENSE.md'into 'META-INF'}
}

看起来不错, gradle publish现在会创建一个完整的pom和一个带有项目许可证的JAR。

来源和Javadoc JAR

不过,大多数项目都希望发布的不仅仅是已编译的.class文件,即源代码和Javadoc。 为此,我添加了两个任务,并从mavenJava引用了它们:

publishing {publications {mavenJava(MavenPublication) {// ...artifact sourceJarartifact javadocJar}}// ...
}task sourceJar(type: Jar, dependsOn: classes) {classifier 'sources'from sourceSets.main.allSource
}task javadocJar(type: Jar, dependsOn: javadoc) {classifier = 'javadoc'from javadoc.destinationDir
}

很好,现在我得到了一个完整的pom,一个用于项目的类和许可证的工件,以及用于源代码和Javadoc的JAR。 是时候采取最后一步了:发布到快照仓库!

为此,我将使用实际的存储库替换mavenLocal 。 除了URL,我还需要指定我的凭据:

repositories {maven {url 'https://oss.sonatype.org/content/repositories/snapshots/'credentials {username 'user'password '123456'}}
}

当然,我并不打算将密码提交给源代码管理,所以我一直在寻找替代方法。 我找到了一个-不确定它是否是最好的,但是,嘿,它有用。

您可以使用-P选项在命令行上定义新的项目属性。 所以给这样的命令...

gradle publish -P snapshotRepoPass=123456

…然后我可以访问项目。 凭据中的snapshotRepoPass

credentials {username 'user'password project.snapshotRepoPass
}

甜。

直到我意识到现在所有其他任务都失败了,因为始终创建credentials对象,因此需要存在属性snapshotRepoPass 。 对于其他任务,除了发布之外,情况并非如此,因为我认为没有理由将回购密码传递给例如测试运行。 如此,我决定在构建文件中定义该属性( 如果由于命令行选项而尚未定义):

ext {// the password needs to be specified via command linesnapshotRepoPass = project.hasProperty('snapshotRepoPass')? project.getProperty('snapshotRepoPass'): ''// it looks like the ternary operator can not actually be// split across lines; I do it here for artistic purposes
}

我本可以将相同的hasProperty/ getProperty检查放入凭据中,但决定在实现此行为的地方创建一个单独的位置。

完成所有这些操作后,我确实可以将项目的当前状态发布到Sonatype Maven快照存储库。 哇!

反射

总而言之,这实际上并不是那么糟糕。 该文档有点稀疏,并在API中构建了XML文件,这使它变得更加冗长,让人感到荒谬,但除此之外,它读起来也很简单。 当时不是,但是现在可以了,所以我应该停止抱怨了。

这是我所做的:

  • 使用apply plugin :' maven-publish '激活插件,并向build.gradle添加一个publishing节点。
  • 用漂亮的asNode.appendNode调用填充pom
  • 通过将复制步骤附加到每个与JAR相关的任务中来包括许可证
  • 创建源和Javadoc JAR的任务,并从publications节点引用它们。
  • 指定存储库URL并添加您的凭据。

如前所述,您可以签出生成的build.gradle文件的两个版本: 一个示例性的版本, 其中包括我们在此构建的内容和实际的交易 。

我还成功设置了Travis CI,以发布每个成功的版本,并将很快尝试发布实际版本。 我会写关于这两者的...

翻译自: https://www.javacodegeeks.com/2016/12/publishing-snapshots-gradles-maven-publish-plugin.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络ipv4到ipv6怎么实现,论计算机网络协议IPV4到IPV6的过渡策略|房屋搬迁过渡协议...

摘要:近年来IPV4协议的网络地址问题已经成为阻碍互联网发展的主要矛盾,而互联网的发展趋势将证明IPV4协议必将会被IPV6协议所替代,但其过渡的过程必定是艰难而漫长的。本文论述了IPV4协议存在的主要问题,并详细的分析了IPV4协议向IPV6协议过渡…

STL常用容器浅谈

STL是C/C开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用。下面,我们就浅谈某些常用的容器。这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点。STL中的常用容器包括:顺序性容器&am…

使用AWS使Spring Boot应用程序无服务器运行

在之前的 几篇 文章中,我描述了如何设置Spring Boot应用程序并在AWS Elastic Beanstalk上运行它。 尽管这是从物理服务器到云服务器的伟大一步,但还有更好的可能! 走向无服务器 。 这意味着无需花费任何服务器费用,也无需维护或配…

计算机对中断的处理是在用户态下进行的,电大本科生作业系统作业3与答案.doc...

电大本科生作业系统作业3与答案《操作系统》课程作业(三)姓名         班级         学号一、选择题(选择一个正确答案的代码填入括号中)作业生存期共经历4个状态,它们是提交、后备、( )和完成。A.等待 B.就绪 C&#xff0…

浏览器输入网址到浏览器渲染页面的过程

1) 在客户端浏览器中输入网址URL。 2) 发送到DNS(域名服务器)获得域名对应的WEB服务器的IP地址。 3) 客户端浏览器与WEB服务器建立TCP(传输控制协议)连接。 4) 客户端浏览器向对应IP地址的WEB服务器发送相应的HTTP或HTTPS请求。 5) WEB服务器响应请求,返回指定的URL…

【资料整理】proftpd安装配置

【资料整理】proftpd安装配置1)下载安装 wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.4c.tar.gz tar zxvf proftpd-1.3.4c.tar.gz cd proftpd-1.3.4c (启用配额模块,限制上传大小,如果重新configure,则需要先make dis…

poj 1873

哇实验室里正在吵架,爽死了! wf水题。显然二进制枚举,注意剪枝,val>ans的时候剪一下,不然会tle。然后就没惹。 我老人家一开始写了个 感觉非常垃圾,wa了一发又t了一发。 感觉自己可以退役了 1 #include …

汉中计算机培训班学费是多少,汉中远程教育培训班收费多少

汉中远程教育培训班收费多少?在企事业单位,无论你的从业履历有多么辉煌,没有本科学历就是一道硬伤。在这个层面上,本科学历是你求得工作的一块“敲门砖”。还有,很多企事业单位是靠学历论薪或者晋职加薪的重要条件&…

wadl_WADL中的JSON模式

wadl在其他工作之间&#xff0c;我最近一直在审查WADL规范&#xff0c;以解决一些文档问题&#xff0c;以生成更新版本。 因为显而易见的一件事是缺少对XML以外的语言的语法支持-是的&#xff0c;您可以使用JSON <-> XML Schema的映射&#xff0c;但这对于JSON纯粹主义者…

计算机资源管理器课件,计算机基础课件ppt-第5讲控制面板与资源管理器.pdf

第五讲控制面板资源管理器与 深入理解控制面板本章重点1、资源管理器2、控制面板3、磁盘管理4、附件5、注册表管理文件和文件夹s查看本机的内容1、双击 “我的电脑”2、双击要查看的磁盘3、双击屏幕上显示出的文件或文件夹便可打开一个文件或显示文件夹中的文件。资源管理器资源…

python中ascii码和字符的转换

将ASCII字符转换为对应的数值即‘a’-->65&#xff0c;使用ord函数,ord(a)反正&#xff0c;使用chr函数&#xff0c;将数值转换为对应的ASCII字符&#xff0c;chr(65)

Java操作MongoDB之mongodb-driver

mongodb-driver是mongo官方推出的java连接mongoDB的驱动包&#xff0c;相当于JDBC驱动。 通过一个入门的案例来了解mongodb-driver的基本使用&#xff1a; 1、查询全部记录 1.1、创建工程mongoDemo&#xff0c;引入依赖 <dependency><groupId>org.mongodb</grou…

具有Stormpath和Spring Boot的OAuth 2.0令牌管理

建筑物身份管理&#xff0c;包括身份验证和授权&#xff1f; 尝试Stormpath&#xff01; 我们的REST API和强大的Java SDK支持可以消除您的安全风险&#xff0c;并且可以在几分钟内实现。 注册 &#xff0c;再也不会建立auth了&#xff01; OAuth 2.0令牌管理经常被误解并且难…

5c用计算机怎么打,再一次谈谈%5c暴库的利用 -电脑资料

再一次谈谈%5c暴库的利用技术&#xff0c;原因我只找到含糊的说法&#xff1a;/的UNICODE是%5c当提交时,IIS无法正常解析,导致暴库&#xff0c;还有很多人说不成功&#xff0c;我要说的三点&#xff1a;1。一般的错误返回页面是本地IE提供的,所以我们先得关了本地的错误页面,具…

CentOS 6.4安装pip,CentOS安装python包管理安装工具pip的方法

之前有的朋友问我&#xff0c;CentOS版本怎么安装python的pip&#xff0c;我之前给出的Ubuntu下apt-get的方法 ubuntu 需要先安装下pip吧&#xff0c; apt-get install python-pip 安装requests&#xff0c; pip install requests 但是有的朋友由于是centos的&#xff0c;直接…

计算机网络原理如何修改本机mtu值,电脑的本地mtu值要怎么设置

相信很多人在玩dota2时都会出现使用wifi联网卡顿的现象&#xff0c;往往是电脑mtu值设置出现问题。下面由学习啦小编为你整理了电脑的本地mtu值要怎么设置的相关方法&#xff0c;希望对你有帮助!电脑设置mtu值的方法如下MTU值是按照TCP/IP协议传输数据报时的最大传输单元。从本…

Python 编程精选

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑为了方便查找&#xff0c;请看目录&#xff08;手机端就没有目录哦&#xff09; 注&#xff1a;本文篇幅较大&#xff0c;请耐心等待&#xff08;power by 《Python黑帽子:黑客与渗透测试编程之道 》&#xff0…

Docker 内程序时间设置,很重要

Docker 内程序时间设置&#xff0c;很重要 原文:Docker 内程序时间设置&#xff0c;很重要重要!!!!! 创建容器时候需要修改一个参数,设置tomcat的时区 -e TZ"Asia/Shanghai" -v /etc/localtime:/etc/localtime:roposted on 2019-03-02 15:15 NET未来之路 阅读(...) 评…

计算机教师专业发展论文,关于教师专业发展的计算机专业论文

1教师专业发展内涵阐述1.1专业知识发展教师的专业知识是教书育人的前提。计算机教师的专业知识包括三个方面&#xff1a;一是日常生活、人文素养等基础文化知识&#xff1b;二是教育理论、教学方法等教育学科知识&#xff1b;三是综合的计算机学科专业知识。1.2专业能力发展教师…

[BZOJ1497] [NOI2006]最大获利

Description 新的技术正冲击着手机通讯市场&#xff0c;对于各大运营商来说&#xff0c;这既是机遇&#xff0c;更是挑战。THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜&#xff0c;需要做太多的准备工作&#xff0c;仅就站址选择一项&#xff0c;就需要完成前期市…