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.修改源。
至此,大功告成。
linux机器上需先安装好jdk,并且配置好java环境变量。
在官网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就包含了启动端口和启动上下文。
浏览器截图如下:
点击右上角的Sign in ,用户名和密码输入(默认的):admin / admin123。
点击设置按钮,再进入System Information菜单。
1、查看版本信息、节点信息、安装目录:
2、查看jdk安装目录:
3、查看maven安装目录:
4、系统运行时内存情况、线程、联网情况
使用默认的用户名和密码登录: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,我们建立包含一个名为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'
}