`
drug
  • 浏览: 12188 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

上传利用GitHub管理的软件到Maven Central Repository之一

阅读更多
笔者最近自己开发了一个开源项目PortletTester,代码托管在GitHub,使用Maven作为构建工具。为了使大家使用起来更加方便,决定尝试将项目发布到Maven的Central Repository上面,这样其他同样使用Maven的人要用的话只需要将PortletTester加入到pom.xml的dependency里就可以了,不用再GitHub网站上下载jar包,还要下载项目依赖的包。

这个过程可以说相当曲折,经过几个晚上的研究,终于把成功地发布了项目的第一个版本。现在把步骤和遇到的问题记录下来,方便有需要的人或者自己以后查阅。本文使用Sonatype Nexus作为代理仓库。也就是说先要把软件发布到这里,然后他们会帮同步到Maven的Central Repository上,这貌似是目前最简单有效的办法。

首先,修改pom.xml文件,使其满足下面这些要求:
  • 下列标签填写正确
  •     <modelVersion>
        <groupId>
        <artifactId>
        <version>
        <packaging>
        <name>
        <description>
        <url>
        <licenses>
        <scm><url>
        <scm><connection>
        <developers>
  • 文件中不能包含<repositories>和<pluginRepositories>标签
  • 假如项目代码托管在GitHub等开源项目网站,<groupId>必须是com.github.<用户名>或者自己拥有的域名之一
  • <verion>的标签必须是带SNAPSHOT的,例如1.0-SNAPSHOT,否则在release:prepare的时候会报错说没有可用的SNAPSHOT版本


确保信息正确以后,在pom.xml中加入
<profiles>
  	<profile>
		<id>release-sign-artifacts</id>
		<activation>
		  <property>
			<name>performRelease</name>
			<value>true</value>
		  </property>
		</activation>
		<build>
		  <plugins>
			<plugin>
			  <groupId>org.apache.maven.plugins</groupId>
			  <artifactId>maven-gpg-plugin</artifactId>
			  <version>1.1</version>
			  <executions>
				<execution>
				  <id>sign-artifacts</id>
				  <phase>verify</phase>
				  <goals>
					<goal>sign</goal>
				  </goals>
				</execution>
			  </executions>
			</plugin>
		  </plugins>
		</build>
	</profile>
  </profiles>


这个profile在运行mvn release:perform的时候生效,主要作用是为发布的软件做数字签名以防别人下载到被修改过的软件。

在pom.xml文件中继续添加:
<build>
  	<plugins>
  		<plugin>
		  <groupId>org.apache.maven.plugins</groupId>
		  <artifactId>maven-source-plugin</artifactId>
		  <executions>
			<execution>
				<id>attach-sources</id>
				<goals>
					<goal>jar</goal>
				</goals>
			</execution>
		  </executions>
		</plugin>
		<plugin>
		  <groupId>org.apache.maven.plugins</groupId>
		  <artifactId>maven-javadoc-plugin</artifactId>
		  <executions>
			<execution>
			  <id>attach-javadocs</id>
			  <goals>
				<goal>jar</goal>
			  </goals>
			</execution>
		  </executions>
		</plugin>
  	</plugins>
  </build>


由于提交到Maven Central Repository的开源软件需要有对应的sources.jar和javadoc.jar文件,因此添加这两个插件方便自动生成这两个必须的文件。

继续修改pom.xml文件,添加:

<distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Repository</name>
            <url>http://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>


这个是发布软件时的目标仓库,如果你发布的不是Sonatype Nexus,那么URL要作相应修改。

到这里pom.xml文件就修改完了。接下来进行其他步骤。请点击http://drug.iteye.com/blog/1979777查看第二篇。
分享到:
评论

相关推荐

    Java idea maven repository

    Java IDEA Maven Repository是Java开发中的一个重要概念,它与IntelliJ IDEA这个强大的集成开发环境(IDE)密切相关。Maven是一个项目管理和综合工具,用于构建、依赖管理和项目信息管理。在Java开发中,Maven仓库是...

    将jar包添加到本地maven仓库

    在Java开发中,Maven作为项目管理和构建工具,广泛用于管理依赖关系。有时,我们可能会遇到一些不常见的库或者自定义的jar包,这些库并未在Maven中央仓库中提供,这时就需要将这些jar包手动添加到本地Maven仓库,...

    maven-repository

    Maven仓库 该项目将以Maven存储库的形式发布TeamVK公开发布的Java资源。 如何使用 为了使用此Maven存储库,您可以使用各种插件(用于您的构建系统,例如Gradle和... mavenCentral() github("teamvk", "maven-repositor

    sonatype与腾讯云配合构建项目到中央仓库.docx

    Sonatype是管理Maven Central Repository的主要平台,它要求所有提交的开源项目都必须经过审核。注册时,选择"Community Support - Open Source"项目类型,并提供New Project的信息。特别要注意填写Group Id,这是你...

    Maven中央仓库地址配置大全

    第二种方式是将 Maven 的远程仓库统一的配置到 Maven 的 Settings.xml 的配置文件中,这种方式更加推荐。 下面是 Maven 中央仓库地址配置大全中的一些常用的地址: 1. 阿里中央仓库(首推1) &lt;repository&gt; &lt;id&gt;...

    Android代码-dbf

    Maven artifact is available from maven central repository. Just add dependency in your pom.xml: org.jamel.dbf dbf-reader 0.0.3 Supported fields types DBF field type Returned as character ...

    maven教程.pdf

    Maven 作为 Java 开发领域的重要工具之一,不仅简化了项目的构建和依赖管理过程,还促进了开发团队之间的协作与交流。掌握 Maven 的基本使用方法对于 Java 开发者来说至关重要。通过上述知识点的学习,可以更好地...

    maven仓库 org开头的jar

    在Java开发领域,Maven是一个不可或缺的工具,它是一个项目管理和综合工具,广泛用于构建、依赖管理和项目信息管理。在Maven的仓库中,我们经常会看到以`org`开头的jar包,这是因为`org`是Maven的一个顶级组织命名...

    Android代码-RxAssetManager

    Use the jcenter() or mavenCentral() repository. repositories { jcenter() mavenCentral() } Then pick a module. Core dependencies { implementation ...

    action-maven-publish::package:用于自动发布Maven包的GitHub Action

    Maven发布动作GitHub Action用于自动发布Maven软件包总览这个动作执行Maven deploy生命周期阶段为Maven提供您的GPG密钥和密码,以便您可以使用maven-gpg-plugin对工件进行签名向Maven提供您的Nexus凭据,以便它可以...

    android中moudle打包aar离线在线模式.doc

    Android 中的 Module 打包是指将多个模块打包成一个 AAR 文件,并上传到 GitHub 远程仓库中,实现模块之间的依赖关系管理。本文将详细介绍在 Android Studio 中如何实现 Module 打包,包括在线模式和离线模式两种...

    Android代码-Android Common Library Samples

    Some modules of project contain dependencies not included in Maven Central - to build such modules you need first install these dependencies in your local repository. To do this, please, download ...

    Android代码-webbit

    Prebuilt JARs are available from the central Maven repository or the Sonatype Maven repository. Alternatively, you can get the latest code from Git and build it yourself: git clone git://github....

    gwtp-dispatch-rpc-client-1.1.1.zip

    而“用于将scala/java项目发布到maven central的sbt插件示例”揭示了这个zip文件包含了一个用于发布软件到Maven中央仓库的示例。Maven中央仓库是Java生态系统中最主要的公共资源库,开发者可以从中获取开源库的依赖...

    完整jar包资源,COULD NOT FIND tephra,包缺失使用

    在描述中提到的问题,开发者在打包应用时遇到了找不到"tephra-hbase-compat-1.0-0.6.0"这个特定版本的JAR包,这通常是由于Maven或Gradle等构建工具无法从默认的远程仓库(如Maven Central Repository)下载所需依赖...

    android-async-http 源码

    Build Status ... Changelog See what is new in version 1.4.9 released on 19th September... mavenCentral() } } dependencies { compile 'com.loopj.android:android-async-http:1.4.9' } development snapshots ...

    latest-unix.tar.gz

    2. **缓存远程仓库**:Nexus可以缓存来自公共Maven仓库(如Central Repository)的工件,减少网络延迟并提高构建速度。 3. **代理仓库**:它可以作为其他仓库的代理,如GitHub Packages或JFrog Artifactory,统一...

    bintray-travisci-deploy-maven-plugin:一个Maven插件,用于从TravisCI将工件部署到Bintray

    开发者可以在Bintray上发布、存储、管理和分发自己的软件,同时可以无缝集成到JCenter或Maven Central等公共仓库,使得其他开发者能轻松地发现并使用这些软件。 **4. Maven插件配置** 在Maven的`pom.xml`文件中,...

    remoteRepository

    在Java开发中,"remoteRepository"通常指的是远程仓库,这是软件开发中的一个重要概念,尤其是在使用版本控制系统如Git时。远程仓库允许开发者将本地项目代码同步到一个中央存储库,这样团队成员可以共享代码,协同...

    CustomDownSelect:自定义筛选条件功能

    mavenCentral() } allprojects { repositories { google() jcenter() maven { url 'https://jitpack.io' } mavenCentral() } } 依赖项{实现'com.github.gyadministrator:CustomDownSelect:1.2'} Maven...

Global site tag (gtag.js) - Google Analytics