管理依赖,自动关联源码
1.下载:
https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.3/binaries/
Linux版:apache-maven-3.3.9-bin.tar.gz
Windows版:apache-maven-3.3.9-bin.zip
2.安装
解压即可,放在根路径下。
3.配置环境变量
M2_HOME=E:\apache-maven-3.3.9
PATH=…..;%M2_HOME%/bin;
1. conf/settings.xml
官方的库在国外经常连不上,连上也下载速度很慢。国内oschina的maven服务器很早之前就关了。配置阿里云的一个中央仓库,速度很快。在
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/repositories/central/
repo1
central
Human Readable Name for this Mirror.
http://repo1.maven.org/maven2/
repo2
central
Human Readable Name for this Mirror.
http://repo2.maven.org/maven2/
2.修改本地库路径
默认:
Linux:~/.m2/repository
Windows:C:\Users\Administrator\.m2\repository
如果需要修改 :conf/settings.xml
参考《Maven实战》
1.查看帮助:mvn:help system
cmd>mvnhelp:system
2.编写pom.xml文件(Project object Model)
4.0.0
org.apache.hadoop
module
2.7.3
例:在F:\workspace\testMaven下创建pom.xml
4.0.0
com.cskywit
helloworld
1.0
3.创建文件夹
Maven假设项目主代码位于src/main/java目录,编写时需要遵循此约定
创建文件夹:F:\workspace\testMaven\src\main\java
在其中继续根据pom.xml定义创建文件夹如下:
F:\workspace\testMaven\src\main\java\com\cskywit\helloworld
4.创建Java类
F:\workspace\testMaven\src\main\java\com\cskywit\helloworld\HelloWorld.java
package com.cskywit.helloworld;
public class HelloWorld
{
public static void main(String[] args){
System.out.println("Hello,World!");
}
}
5.使用maven编译Java源代码
cmd>tree /F
在有pom.xml文件的地方进入cmd执行:
cmd>mvn clean compile
编译无误后会生成target目录,可以用tree命令查看:
打包:
cmd>mvnclean package
尝试运行:
cmd>cd target
cmd>java –cp helloworld-1.0.jar com.cskywit.helloworld.HelloWorld
Nexus是Maven仓库管理器,也可以叫Maven的私服。Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。详细查看博客http://blog.csdn.net/jiuqiyuliang/article/details/49407455。
下载地址:https://www.sonatype.com/download-sonatype-trial?submissionGuid=0b0bc55e-4039-4945-ae71-fd38dab4fa34
本次下载的是nexus-2.14.8-01-bundle.zip
部署方式可分为直接部署和使用Tomcat方式,详请可以参考上文博客链接。这里直接部署:将压缩包解压缩到E:\tools\nexus-2.14.8-01-bundle,内含两个子目录,其中nexus-2.14.8-01包含Nexus运行所有需要的文件,如启动脚本、依赖jar包等,sonatype-work目录包含Nexus生成的配置文件、日志文件、仓库文件。该目录不是必须得,Nexus会在运行的时候动态的创建,不再过多的介绍。
打开E:\tools\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin\jsw可以看到针对不同的平台的运行环境:
打开Windows-x86-64的文件夹:
console-nexus.bat:启动Nexus服务器,命令窗口关闭后不会驻留在Windows服务中;
install-nexus.bat:将Nexus安装成为Windows服务,开机时自动启动,个人比较推荐;
start-nexus.bat:启动服务;
stop-nexus.bat:停止服务;
uninstall-nexus.bat:卸载Nexus在Windows中的服务;
为方便启动和退出Nexus,将E:\tools\nexus-2.14.8-01-bundle\nexus-2.14.8-01\bin添加到环境变量PATH中。
打开浏览器,访问http://localhost:8081/nexus
默认登录用户名/密码:admin/admin123
E:\tools\nexus-2.14.8-01-bundle\nexus-2.14.8-01\nexus\WEB-INF\classes\nexus.properties
将私服仓库配置在E:/tools/maven-repo/nexus,该配置文件内容为:
nexus-work=E:/tools/maven-repo/nexus
runtime=${bundleBasedir}
nexus-app=${runtime}
配置保存后重启nexus。
(1)如果已经有现成下好的仓库,直接复制到仓库位置即可;
(2)如果没有现成仓库,可以自行更新,按如下方式:
(a)网络自动下载方式:
进入Nexus Web控制端依次点击1.左边的Repositories 2.点击Central 3.点击下面的Configuration 4.找到Download Remote Indexes 5.选择true 6.右键Central选择repair index或者update index都行。
至此私服就开始向中央库下载更新索引了(前提你要有网络,否则会失败)。点击左边的Administration下的Scheduled Tasks可以查看当前任务进度。如果状态为running则标示任务已经开始执行。
更新索引会花费比较多的时间大概半小时到1小时左右。
如果想看进度可以打开nexus-2.14.4-03文件夹->logs->wapper.log查看日志。
如果日志中出现
jvm 1 | 2017-07-21 15:48:19,615+0800 INFO[pxpool-1-thread-1] admin org.sonatype.nexus.index.NexusScanningListener -Scanning of repositoryID="central" started.
标示更新索引已经开始。如果之后再没有信息表示正在进行。如果更新失败log里也会显示。如果显示finished则表示更新索引成功。
jvm 1 | 2017-07-21 15:53:18,583+0800 INFO[pxpool-1-thread-1] admin org.sonatype.nexus.index.NexusScanningListener -Scanning of repositoryID="central" finished
到这里,maven的私服算是搭建完成了。
(b)手动更新方式:
网络自动下载太慢而且总是失败,可以选择手动更新,这里参考了https://blog.csdn.net/zyf_balance/article/details/48130901。
Step1:下载以下3个文件到同一目录下
http://repo.maven.apache.org/maven2/.index/nexus-maven-repository-index.gz
http://repo.maven.apache.org/maven2/.index/nexus-maven-repository-index.properties
http://central.maven.org/maven2/org/apache/maven/indexer/indexer-cli/5.1.1/indexer-cli-5.1.1.jar
Step2:执行命令,执行完之后在同一目录下会生成indexer文件夹
java -jar indexer-cli-5.1.1.jar -u nexus-maven-repository-index.gz-d indexer
step3:将文件夹下的文件拷贝到以下目录中,该目录为central库对应的目录,nexus安装完成后就存在了
{nexus_home}\sonatype-work\nexus\indexer\central-ctx
step4:重启nexus服务
此处参考了:https://blog.csdn.net/Dynamic_W/article/details/75661204
(1)编辑${M2_HOME}/conf/settings.xml文件,关于此配置文件更加详细的说明可以参考博客:
https://blog.csdn.net/Dynamic_W/article/details/77483311。
添加镜像:
添加镜像:
nexus-mirror
maven-central
http://localhost:8081/nexus/content/repositories/central/
添加服务验证:
nexus
admin
admin123
做构件的配置
nexuesProfile
maven-central
maven-central
http://localhost:8081/nexus/content/repositories/central/
true
true
激活构件
nexuesProfile
6.maven仓库、本地库与远程库的小结
cmd>mvn clean //清除target目录
cmd>mvn clean compile //清除并编译
cmd>mvn clean package //清除并生成jar包
cmd>mvn package -Dmaven.test.skip=true
cmd>mvn package -DskipTests
cmd>mvn install //安装到本地仓库中
cmd>mvn archetype:generate
cmd>mvn archetype:generate -DarchetypeCatalog=internal //初始化maven项目,解决卡问题
自动生成的POM文件如下:
eclipse->window->Preferences->Maven->UserSettings
设置:
Global Settings:E:\apache-maven-3.3.9\conf\settings.xml
User Settings:E:\apache-maven-3.3.9\conf\settings.xml
自动解析本地仓库目录:C:\Users\Administrator\.m2\repository
1.eclipse->new Project->new MavenProject
2.选择archetype版本(可使用默认)
3.配置GroupID,ArtifactID,version,Package
4.项目完成创建后自动生成POM.xml文件,打开该文件,为开发hadoop项目,在其中依赖部分加入:
org.apache.hadoop
hadoop-client
2.7.3
test
Eclipse将会调用maven自动下载本地库没有的文件。实际使用过程中以上ID不用记忆,可以直接百度xxx maven,如hadoop maven即可:
最后写代码测试一下:递归输出HDFS目录结构,使用单元测试运行
package com.cskywit.myhadoop20180604;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
/**
* @author cskywit
* 测试HDFS
*/
public class TestHDFS
{
@Test
public void listFS() throws Exception{
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://192.168.40.130:8020/");
FileSystem fs = FileSystem.get(conf);
printPath(fs, new Path("/"));
}
/**
*
* @param fs
* @param p
*
*/
private void printPath(FileSystem fs,Path p){
try {
//输出路径
System.out.println(p.toUri().toString());
if(fs.isDirectory(p)){
FileStatus[] fileStatus=fs.listStatus(p);
if(fileStatus !=null&&fileStatus.length >0){
for(FileStatus f:fileStatus){
Path P0 = f.getPath();
printPath(fs, P0);
}
}
}
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果如下:
/
hdfs://192.168.40.130:8020/user
hdfs://192.168.40.130:8020/user/ctr
hdfs://192.168.40.130:8020/user/ctr/hadoop
hdfs://192.168.40.130:8020/user/ctr/hadoop/a.cmd
hdfs://192.168.40.130:8020/user/ctr/hadoop/mkFromWindows
hdfs://192.168.40.130:8020/user/ctr/hadoop/mkFromWindows/hello.txt