发布android库项目到私有maven库

一、ubuntu16.04系统下安装maven

maven是个项目管理工具,在编程领域应用广泛。本文主要讲述如何在ubuntu16.04系统下安装maven。

第一步,去官网下载maven。

第二步,解压到/opt/maven目录。

创建manve目录。

sudo mkdir /opt/maven

解压到/opt/maven目录下。

sudo tar zxvf apache-maven-3.5.0-bin.tar.gz -C /opt/maven

第三步,配置mavne环境。

sudo gedit /etc/profile

在文件内容后面添加以下内容:

export M2_HOME=/opt/maven/apache-maven-3.5.0
export CLASSPATH=$CLASSPATH:$M2_HOME/lib
export PATH=$PATH:$M2_HOME/bin

保存,输入以下命令使配置文件生效。

source /etc/profile

验证是否安装成功。

mvn -v

出现以下结果,代表安装成功。

è¿éåå¾çæè¿°

第四步,修改maven源为阿里云,以及仓库默认存放路径。这样maven下载jar包的速度会快很多。

打开maven的配置文件。

sudo gedit /opt/maven/apache-maven-3.5.0/conf/settings.xml

按照以下图解修改。

1.在/home目录下生成maven/repository文件夹。

è¿éåå¾çæè¿°

2.修改源。

è¿éåå¾çæè¿°

至此,大功告成。



二、安装JDK

linux机器上需先安装好jdk,并且配置好java环境变量。

 

三、安装nexus

在官网https://www.sonatype.com/download-oss-sonatype下载nexus开源版本。

把下载好的nexus-3.14.0-04-mac.tgz文件放到/opt/目录下。这个目录你自己可以随意定。

进入tgz文件所在目录: cd /opt/

在/opt目录下解压缩tgz文件命令: tar -zxvf nexus-3.14.0-04-mac.tgz

解压缩后当前目录出现了两个目录: nexus-3.14.0-04 和 sonatype-work,注意这个sonatype-work也是个有用的文件夹,不要删除。

修改启动文件以root用户启动

进入安装下的bin目录: cd /opt/nexus-3.14.0-04/bin

用vim命令修改启动文件nexus:  vim nexus

找到127行(如何显示行号自行百度),把原来的run_as_root=true改为false,这里我是注释掉原来那行,新增加了一行run_as_root=false,如下:

#run_as_root=true
run_as_root=false

进入启动相关配置文件:  cd /opt/nexus-3.14.0-04/etc/  

然后查看配置文件:cat nexus-default.properties

应用启动端口:

  application-port=8081

应用启动上下文:

  nexus-context-path=/     

进入bin目录,启动nexus: ./opt/nexus-3.14.0-04/bin/nexus run        注意最前面的那个点不要忽略,最后的run参数之前要有一个空格

执行run命令后,输出:Starting nexus

我本地启动大约需要30秒左右,查看nexus是否已启动命令:ps -ef|grep nexus   如果有输出则证明启动了。

验证是否启动成功,在浏览器里输入url: 

http://localhost:8081/          如果在别的机器访问,例如我这里是http://192.168.125.150:8081/  显示不出网页,考虑可能是linux启用了防火墙,限制了端口号。

这里的url就包含了启动端口和启动上下文。

浏览器截图如下:

四、查看nexus相关配置

 

点击右上角的Sign in ,用户名和密码输入(默认的):admin / admin123。

点击设置按钮,再进入System Information菜单。

1、查看版本信息、节点信息、安装目录:

2、查看jdk安装目录:

3、查看maven安装目录:

 4、系统运行时内存情况、线程、联网情况

五、配置私有库release

使用默认的用户名和密码登录:admin / admin123。

新建仓库:release

在nexus3.X版本已经没有repository ID的概念了,所以取个name就好,配置文件需要用到repository ID的地方统统使用name就行。新建repository:

为新版本库归纳到中央库maven-public

当新库创建完毕时,要把新库归纳到我们的版本库中心:maven-public,这个库是所有其他库的中央库,包含了其余所有库的包,归纳操作步骤:

双击maven-public库,进入详细页:

六、出现的问题

报错 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (deploy) on project light.inf: Failed to deploy artifacts: Could not transfer artifact com.xxx.game:light.inf:jar:1.0 from/to releases (http://192.168.10.xxx:8081/repository/maven-releases/): Failed to transfer file: 
http://192.168.10.xxx:8081/repository/maven-releases/com/xxx/game/light.inf/1.0/light.inf-1.0.jar. Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases. -> [Help 1]

解决
事先请确保nexus搭建正确,可以使用cmd执行带参数的mvn deploy命令成功上传一个jar来验证,cmd命令附上 
mvn deploy:deploy-file -DgroupId=com.test -DartifactId=test -Dversion=1.2 -Dpackaging=jar -Dfile=E:\workspace\test-1.2.jar -Durl=http://192.168.xx.xxx:8081/repository/maven-releases/ -DrepositoryId=releases 
当然,该命令能成功执行的前提是本地安装的mvn目录的conf/settings.xml中配置有id为releases的server
浏览器登录nexus管理界面–>设置图标–>Repository–>Repositories–>maven-releases–>Hosted–>请选择‘Allow redeploy’策略,默认是disable策略,然后保存。 请注意,不同版本的nexus,进入的路径可能有细微区别

 

七、Android Studio发布aar到私有maven仓库

接下来我们进入Android Studio,我们建立包含一个名为app的application模块以及一个名为mylibrary的library模块。步骤我就不多说了,如果你是安卓开发者你肯定是会的了。然后我们在mylibrary的源码目录随便写一个类: 
CoreClass.java

public class CoreClass {
    public static String Core(){
        return "This is my core function";
    }
}

接下来我们在mylibrary的根目录下添加upload_local_maven.gradle的文件。并输入以下内容。和上传Jcenter一样,我们同样也上传pom,aar,source,doc四个文件。

apply plugin: 'maven'


//def定义的变量才会在project中
def POM_NAME='core'

def POM_VERSION='1.0.0'

def POM_ARTIFACTID="core"//项目名称id

def POM_GROUPID='com.example.mylibrary'  //项目组id

def POM_PACKAGING='aar'

def POM_DESCRIPTION='lib for Android'

def NEXUS_USERNAME='admin'   //用户名

def NEXUS_PASSWORD='admin123'  //密码

def NEXUS_REPOSITORY_URL='http://localhost:8081/repository/ttsx/'  //repository的URL

task androidJavadocs(type: Javadoc) {
    options.encoding = "utf-8"
    source = android.sourceSets.main.java.srcDirs
    //添加classpath,解析类型
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//打包doc
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc' //分类器,区分jar
    from androidJavadocs.destinationDir
}

//打包源码

task androidSourcesJar(type: Jar) {
    classifier = 'sources'//分类器,区分jar
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: NEXUS_REPOSITORY_URL) {
                authentication(userName: NEXUS_USERNAME, password: NEXUS_PASSWORD)
            }
            pom.project {
                name POM_NAME
                version POM_VERSION
                artifactId POM_ARTIFACTID
                groupId POM_GROUPID
                packaging POM_PACKAGING
                description POM_DESCRIPTION
            }
        }
    }
}

这里上传代码参考了https://www.jianshu.com/p/efddad9d4f84。最终目录结构 

è¿éåå¾çæè¿°
 
最后我们在mylibrary下的build.gradle末尾处添加如下代码,并同步gradle。

apply from: 'upload_local_maven.gradle'
1
最后我们在gradle的任务窗口中找到对应的上传任务并执行。 
 è¿éåå¾çæè¿°
执行成功后我们就可以找到上传成功的文件了。 

è¿éåå¾çæè¿°

最后我们尝试一下在app中引用这个模块,在app的build.gradle中添加如下代码。需要特殊指定maven的库的URL。

repositories{
    maven{
        url "http://localhost:8081/repository/maven-releases/"
    }
}
dependencies {

    implementation 'com.example.mylibrary:core:1.0.0'

}
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值