阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

建立企业内部Maven服务器并使用Android Studio发布公共项目

221次阅读
没有评论

共计 9972 个字符,预计需要花费 25 分钟才能阅读完成。

由于 Android Studio 使用了 Gradle 构建工具,在 library 依赖的处理上是将被依赖的 library 作为一个 module 引入(拥有一份完整的 library 拷贝),而 Eclipse 的 ADT 则是直接将 library 作为外部项目依赖链接进来,两者各有各的优缺点。Android Studio 的好处是能时刻保持项目的完整性,每一个项目都包含了整个项目所需要的一切东西,当你把项目共享给别人的时候就不会因为落下某个 library 而导致别人无法正常打开你的项目。缺点则是多个项目都依赖同一个 library,每个项目都有自己一份 library 代码拷贝,当这个 library 的代码需要更新的时候,每一个项目中的 library 代码都需要更新一遍。而 Eclipse 的 library 依赖,只是做了一个 library 链接,多个项目可以链接到同一个 library,好处是 library 需要修改的时候只需要修改一处代码,缺点时与他人共享项目的时候可能会落下 library 忘记共享。

一般一个公司长期开发累积下来,都会总结出一套自己的 SDK 或者工具供自己的产品使用。如果使用 Android Studio 开发,一旦自己的 SDK 需要更新难免就会遇到前面说的问题。好在 Android Studio 除了 library module 依赖这种方法之外,还提供了本地仓库或者(服务器)远程仓库依赖,通过 Gradle 工具自动从仓库中获取并管理项目所需要的 library。Gradle 支持 maven 仓库,早期的 Android Studio 直接使用的就是 maven 中央仓库,虽然正式版之后改用 jcenter,但是依然可以混用自定义的 maven 仓库。

Maven 权威指南_中文完整版清晰 PDF  http://www.linuxidc.com/Linux/2014-06/103690.htm

Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm

Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm

Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm

Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm

Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm

整体上的解决思路分三个步骤:

  • 第一,就是在自己公司内部的服务器上搭建一个 maven 仓库
  • 第二,将自己公司的公共类库发布到公司内部服务器的 maven 仓库上
  • 第三,在公司其它项目中配置公司内部服务器 maven 仓库地址,并引用所需的 library,Gradle 会自动从服务器 maven 仓库中获取

1、在自己公司内部服务器上搭建 maven 仓库

服务器上的 maven 仓库可以使用 Sonatype nexus oss 来搭建。sonatype nexus oss 是一个 maven 仓库管理工具,并提供了 web 控制台,部署和使用都很方便。

1.1 下载 sonatype nexus oss

将 sonatype nexus oss 下载到公司内部服务器上,下载地址:http://www.sonatype.org/nexus/go

1.2 安装并运行 sonatype nexus oss

首先确认服务器上是否已经安装 JDK,nexus oss 的运行需要 JDK7 或者 JDK8。如果没有安装 JDK,请先安装 JDK。

下载下来的 nexus oss 是一个 zip 或者 tar.gz 压缩包,需要将其解压。你可以将其解压到任何位置,nexus oss 的运行对其所在位置没有什么特殊要求。解压后会看到两个文件夹,一个是 nexus-x.xx.x-xx,一个 sonatype-work。其中 nexus-x.xx.x-xx 是 nexus oss 的主目录,所有运行程序和配置文件都在里面。sonatype-work 是 nexus-oss 的数据目录,nexus-oss 运行过程的 maven 仓库数据都在这里面。进入 nexus-x.xx.-x-xx/bin 目录,window 平台的服务器直接运行 nexus.bat 脚本就可以了。下面详细讲下 linux 平台的安装和运行。

nexus oss 官方建议将 nexus-x.xx.x-xx 安装到 /usr/local 目录下,并做个 /usr/local/nexus 链接指向 nexus-x.xx.x-xx 目录,方便以后 nexus oss 版本升级。方法如下

$ sudo cp nexus-x.xx.x-xx-bundle.tar.gz /usr/local
$ cd /usr/local
$ sudo tar xvzf nexus-x.xx.x-xx-bundle.tar.gz
$ sudo ln -s nexus-x.xx.x-xx nexus

如果你下载的是 zip 压缩包,则使用 sudo unzip nexus-x.xx.x-xx-bundle.zip 命令解压。

为了方便以后使用,可以添加 $NEXUS_HOME 环境变量指向 /usr/local/nexus。另外,默认配置 sonatype-work 目录与 nexus-x.xx.x-xx 在同一个目录下,如果你想讲 sonatype-work 迁移到其它指定路径,可以修改 nexus-x.xx.x-xx/conf/nexus.properties 配置文件中的 nexus-work 变量值。

完成之后,运行 nexus oss 只需要运行 nexus-x.xx.x-xx/bin/nexus 脚本,参数可以为 console 或者 start。console 会在控制台打印出运行日志。如果有配置 NEXUS_HOME 环境变量,就可以在任何地方执行下面语句:

$NEXUS_HOME/bin/nexus start

1.3 配置 sonatype nexus oss

运行成功之后,在浏览器打开 http:// 服务器地址:8081/nexus 就可以看到 nexus oss 的控制面板。

点击右上角 login 登录,默认账号密码为 admin/admin123。登录后可以看到以下界面:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

左边是功能面板,可以在 Repositories 里面查看所有的 maven 仓库,在 User 里面进行用户管理(修改密码什么的)。点击 Repositories,查看 maven 仓库:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

可以看到 nexus oss 默认已经建好了几个仓库,每个仓库都有自己的一些属性。

第一个重要属性是 type 仓库类型。主要有 group、hosted、proxy、virtual 四种类型。不同类型的仓库有不用的作用和工作模式,一般只需要关注 group、hosted、proxy 三种类型。由于 nexus oss 上面可以有多个 maven 仓库,但是 maven 这个工具要求使用 groupId:artifactId:version 这三个参数就能唯一确定一个项目,因此 nexus oss 使用 group 类型的仓库来决定 nexus oss 上各个 maven 仓库的优先级,以解决不同 maven 拥有相同项目的冲突。proxy 类型的仓库其实只是个代理,用于代理其他服务器上的 maven 仓库。hosted 类型是 nexus oss 自己所在服务器本地的 maven 仓库,也是我们这次主要使用的仓库类型。

Repository Path 是仓库的地址,把自己的项目发布到 maven 和引用 maven 仓库中项目的时候需要用到。

选择一个仓库后,可以在下面窗口中看到这个仓库的具体信息,其中 Configuration 标签页中可以对仓库进行设置。

我们的目的是要将我们自己的项目发布到我们自己的服务器上去,因此我们要选择 hosted 类型的仓库,以免公司内部的代码外泄出去(当然服务器也得是内网的服务器,公网能访问到的服务器,发布上去的代码也有一定的风险)。对于我们要使用的 hosted 类型的仓库,重点要看的是里面的 Repository Policy 仓库存储协议,有 release 和 snapshot 两种,release 表示发行版,snapshot 表示快照版本。还有一个 Deployment Policy 部署协议,有 Allow Redeploy(允许部署)、Disable Redeploy(不允许部署)、Read Only(只读)三种模式。只有在 Allow Redeploy 模式下,我们才有权限可以将我们的项目发布到这个项目中。nexus oss 默认已经建立了 Releases 和 snapshots 两个 hosted 仓库,我们检查一下配置就可以直接拿来用,当然你也可以自己建立 hosted 仓库。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2015-06/118878p2.htm

2、发布公共类库到服务器 maven 仓库

编辑需要发布的公共类库的 module 的 build.gradle 脚本,在末尾添加下面配置:

apply plugin: ‘maven’
def isReleaseBuild() {
    return VERSION_NAME.contains(“SNAPSHOT”) == false
}
def getRepositoryUsername() {
    return hasProperty(‘NEXUS_USERNAME’) ? NEXUS_USERNAME : “”
}
def getRepositoryPassword() {
    return hasProperty(‘NEXUS_PASSWORD’) ? NEXUS_PASSWORD : “”
}
afterEvaluate {project ->
    uploadArchives {
        repositories {
            mavenDeployer {
                pom.groupId = GROUP
                pom.artifactId = POM_ARTIFACT_ID
                pom.version = VERSION_NAME
                repository(url: RELEASE_REPOSITORY_URL) {
                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
                }
                snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {
                    authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
                }
            }
        }
    }
    task AndroidJavadocs(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    }
    task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
        classifier = ‘javadoc’
        from androidJavadocs.destinationDir
    }
    task androidSourcesJar(type: Jar) {
        classifier = ‘sources’
        from android.sourceSets.main.java.sourceFiles
    }
    artifacts {
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}

同样在这个 module 下添加 gradle.properties 文件,文件内容如下:

GROUP= 对应 maven 的 groupId 值,如果名字中包含 SNAPSHOT 字符,项目将会发布到 snapshots 仓库,没有则发布到 releases 仓库
VERSION_NAME= 对应 maven 的 version 值
POM_ARTIFACT_ID= 对应 maven 的 artifactId 值

SNAPSHOT_REPOSITORY_URL= 前面配置的 snapshots 仓库地址
RELEASE_REPOSITORY_URL= 前面配置的 releases 仓库地址

NEXUS_USERNAME= 登录 nexus oss 的用户名
NEXUS_PASSWORD= 登录 nexus oss 的密码

修改完之后,在 Android Studio 右面的 Gradle 面板中找到对应的 module,在这个 module 下面就能看到 uploadArchive 这个 task:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

双击运行这个 task,项目就发布到 nexus oss 对应的 maven 仓库中,在日志中可以看到类似这样的信息:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

看到 BUILD SUCCESSFUL 表示发布成功,回过头来看 nexus oss 面板上的仓库,找到你发布上去的仓库,应该就能找到你的项目,比如我发布的项目:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

3、在其它项目用引用我们发布的类库

方法很简单,在需要添加依赖的 module 的 build.gradle 文件中找到 dependencies 对象,在其中添加我们自己 maven 服务器的 url 地址,然后按照前面我们发布项目时配置文件中的 gradleId:archiveId:version 方式应用就可以了,比如我自己的仓库和项目:

[img]http://img.blog.csdn.net/20150319184230008[/img]

添加后刷新同步下 gradle,项目依赖就自动处理了。公共类库有修改,只需要修改公共类库并修改下 version 版本号,然后再发布一次代码到 maven 上去。其它项目只需要修改下 gradle 脚本中的版本号,代码就都自动更新上了。

Ubuntu 12.04(64 位) 安装 Android Studio 全过程 http://www.linuxidc.com/Linux/2013-05/84812.htm 

Android Studio v0.1 尝鲜 http://www.linuxidc.com/Linux/2013-05/84681.htm 

Android Studio 使用教程 http://www.linuxidc.com/Linux/2013-05/84579.htm 

Android Studio 开发指南 http://www.linuxidc.com/Linux/2013-05/84543.htm 

Android Studio 设置主题 和 不支持中文的问题解决方法 http://www.linuxidc.com/Linux/2013-05/84488.htm 

Android Studio 下载安装以及不能打开的解决办法 http://www.linuxidc.com/Linux/2013-05/84409.htm 

Android Studio 安装使用图文教程 http://www.linuxidc.com/Linux/2014-09/106914.htm 

Android Studio 的详细介绍 :请点这里
Android Studio 的下载地址 :请点这里 

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-06/118878.htm

由于 Android Studio 使用了 Gradle 构建工具,在 library 依赖的处理上是将被依赖的 library 作为一个 module 引入(拥有一份完整的 library 拷贝),而 Eclipse 的 ADT 则是直接将 library 作为外部项目依赖链接进来,两者各有各的优缺点。Android Studio 的好处是能时刻保持项目的完整性,每一个项目都包含了整个项目所需要的一切东西,当你把项目共享给别人的时候就不会因为落下某个 library 而导致别人无法正常打开你的项目。缺点则是多个项目都依赖同一个 library,每个项目都有自己一份 library 代码拷贝,当这个 library 的代码需要更新的时候,每一个项目中的 library 代码都需要更新一遍。而 Eclipse 的 library 依赖,只是做了一个 library 链接,多个项目可以链接到同一个 library,好处是 library 需要修改的时候只需要修改一处代码,缺点时与他人共享项目的时候可能会落下 library 忘记共享。

一般一个公司长期开发累积下来,都会总结出一套自己的 SDK 或者工具供自己的产品使用。如果使用 Android Studio 开发,一旦自己的 SDK 需要更新难免就会遇到前面说的问题。好在 Android Studio 除了 library module 依赖这种方法之外,还提供了本地仓库或者(服务器)远程仓库依赖,通过 Gradle 工具自动从仓库中获取并管理项目所需要的 library。Gradle 支持 maven 仓库,早期的 Android Studio 直接使用的就是 maven 中央仓库,虽然正式版之后改用 jcenter,但是依然可以混用自定义的 maven 仓库。

Maven 权威指南_中文完整版清晰 PDF  http://www.linuxidc.com/Linux/2014-06/103690.htm

Maven 3.1.0 发布,项目构建工具 http://www.linuxidc.com/Linux/2013-07/87403.htm

Linux 安装 Maven http://www.linuxidc.com/Linux/2013-05/84489.htm

Maven3.0 配置和简单使用 http://www.linuxidc.com/Linux/2013-04/82939.htm

Ubuntu 下搭建 sun-jdk 和 Maven2 http://www.linuxidc.com/Linux/2012-12/76531.htm

Maven 使用入门 http://www.linuxidc.com/Linux/2012-11/74354.htm

整体上的解决思路分三个步骤:

  • 第一,就是在自己公司内部的服务器上搭建一个 maven 仓库
  • 第二,将自己公司的公共类库发布到公司内部服务器的 maven 仓库上
  • 第三,在公司其它项目中配置公司内部服务器 maven 仓库地址,并引用所需的 library,Gradle 会自动从服务器 maven 仓库中获取

1、在自己公司内部服务器上搭建 maven 仓库

服务器上的 maven 仓库可以使用 Sonatype nexus oss 来搭建。sonatype nexus oss 是一个 maven 仓库管理工具,并提供了 web 控制台,部署和使用都很方便。

1.1 下载 sonatype nexus oss

将 sonatype nexus oss 下载到公司内部服务器上,下载地址:http://www.sonatype.org/nexus/go

1.2 安装并运行 sonatype nexus oss

首先确认服务器上是否已经安装 JDK,nexus oss 的运行需要 JDK7 或者 JDK8。如果没有安装 JDK,请先安装 JDK。

下载下来的 nexus oss 是一个 zip 或者 tar.gz 压缩包,需要将其解压。你可以将其解压到任何位置,nexus oss 的运行对其所在位置没有什么特殊要求。解压后会看到两个文件夹,一个是 nexus-x.xx.x-xx,一个 sonatype-work。其中 nexus-x.xx.x-xx 是 nexus oss 的主目录,所有运行程序和配置文件都在里面。sonatype-work 是 nexus-oss 的数据目录,nexus-oss 运行过程的 maven 仓库数据都在这里面。进入 nexus-x.xx.-x-xx/bin 目录,window 平台的服务器直接运行 nexus.bat 脚本就可以了。下面详细讲下 linux 平台的安装和运行。

nexus oss 官方建议将 nexus-x.xx.x-xx 安装到 /usr/local 目录下,并做个 /usr/local/nexus 链接指向 nexus-x.xx.x-xx 目录,方便以后 nexus oss 版本升级。方法如下

$ sudo cp nexus-x.xx.x-xx-bundle.tar.gz /usr/local
$ cd /usr/local
$ sudo tar xvzf nexus-x.xx.x-xx-bundle.tar.gz
$ sudo ln -s nexus-x.xx.x-xx nexus

如果你下载的是 zip 压缩包,则使用 sudo unzip nexus-x.xx.x-xx-bundle.zip 命令解压。

为了方便以后使用,可以添加 $NEXUS_HOME 环境变量指向 /usr/local/nexus。另外,默认配置 sonatype-work 目录与 nexus-x.xx.x-xx 在同一个目录下,如果你想讲 sonatype-work 迁移到其它指定路径,可以修改 nexus-x.xx.x-xx/conf/nexus.properties 配置文件中的 nexus-work 变量值。

完成之后,运行 nexus oss 只需要运行 nexus-x.xx.x-xx/bin/nexus 脚本,参数可以为 console 或者 start。console 会在控制台打印出运行日志。如果有配置 NEXUS_HOME 环境变量,就可以在任何地方执行下面语句:

$NEXUS_HOME/bin/nexus start

1.3 配置 sonatype nexus oss

运行成功之后,在浏览器打开 http:// 服务器地址:8081/nexus 就可以看到 nexus oss 的控制面板。

点击右上角 login 登录,默认账号密码为 admin/admin123。登录后可以看到以下界面:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

左边是功能面板,可以在 Repositories 里面查看所有的 maven 仓库,在 User 里面进行用户管理(修改密码什么的)。点击 Repositories,查看 maven 仓库:

建立企业内部 Maven 服务器并使用 Android Studio 发布公共项目

可以看到 nexus oss 默认已经建好了几个仓库,每个仓库都有自己的一些属性。

第一个重要属性是 type 仓库类型。主要有 group、hosted、proxy、virtual 四种类型。不同类型的仓库有不用的作用和工作模式,一般只需要关注 group、hosted、proxy 三种类型。由于 nexus oss 上面可以有多个 maven 仓库,但是 maven 这个工具要求使用 groupId:artifactId:version 这三个参数就能唯一确定一个项目,因此 nexus oss 使用 group 类型的仓库来决定 nexus oss 上各个 maven 仓库的优先级,以解决不同 maven 拥有相同项目的冲突。proxy 类型的仓库其实只是个代理,用于代理其他服务器上的 maven 仓库。hosted 类型是 nexus oss 自己所在服务器本地的 maven 仓库,也是我们这次主要使用的仓库类型。

Repository Path 是仓库的地址,把自己的项目发布到 maven 和引用 maven 仓库中项目的时候需要用到。

选择一个仓库后,可以在下面窗口中看到这个仓库的具体信息,其中 Configuration 标签页中可以对仓库进行设置。

我们的目的是要将我们自己的项目发布到我们自己的服务器上去,因此我们要选择 hosted 类型的仓库,以免公司内部的代码外泄出去(当然服务器也得是内网的服务器,公网能访问到的服务器,发布上去的代码也有一定的风险)。对于我们要使用的 hosted 类型的仓库,重点要看的是里面的 Repository Policy 仓库存储协议,有 release 和 snapshot 两种,release 表示发行版,snapshot 表示快照版本。还有一个 Deployment Policy 部署协议,有 Allow Redeploy(允许部署)、Disable Redeploy(不允许部署)、Read Only(只读)三种模式。只有在 Allow Redeploy 模式下,我们才有权限可以将我们的项目发布到这个项目中。nexus oss 默认已经建立了 Releases 和 snapshots 两个 hosted 仓库,我们检查一下配置就可以直接拿来用,当然你也可以自己建立 hosted 仓库。

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2015-06/118878p2.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计9972字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中