准备环境
直接拉取使用现成的镜像吧:
docker pull virhuiai/maven_quick:version-aliyun
运行容器
进入一个目录:
cd /Volumes/RamDisk
运行maven并将当前目录映射到容器的工作目录,后面从容器里拷贝文件到宿主就可以不用docker cp命令了:
docker run -it --rm --name maven_quick_tmp_run -v "$HOME/.m2/repository":/root/.m2/repository -v "$PWD":/usr/src/mymaven -w /usr/src/mymaven virhuiai/maven_quick:version-aliyun /bin/sh
现在找下安装目录,知道maven有个settings.xml文件,就通过它来找到目录吧:
# updatedb # locate settings.xml/usr/share/maven/conf/settings.xml
找到了,目录是/usr/share/maven/(镜像安装有mlocate工具,有兴趣可以看看这个镜像的配置说明):
cd /usr/share/maven/
下面看一下该目录的结构和内容。
maven安装目录的结构和内容
# ls -altotal 60drwxr-xr-x 1 root root 4096 Jan 13 07:04 .drwxr-xr-x 1 root root 4096 Feb 1 06:55 ..-rw-r--r-- 1 root root 17504 Nov 7 2019 LICENSE-rw-r--r-- 1 root root 5141 Nov 7 2019 NOTICE-rw-r--r-- 1 root root 2612 Nov 7 2019 README.txtdrwxr-xr-x 2 root root 4096 Jan 13 07:04 bindrwxr-xr-x 2 root root 4096 Jan 13 07:04 bootdrwxr-xr-x 1 root root 4096 Feb 1 06:55 confdrwxr-xr-x 4 root root 4096 Jan 13 07:04 libdrwxr-xr-x 1 root root 4096 Jan 13 07:04 ref
有四个目录
drwxr-xr-x 2 root root 4096 Jan 13 07:04 bindrwxr-xr-x 2 root root 4096 Jan 13 07:04 bootdrwxr-xr-x 1 root root 4096 Feb 1 06:55 confdrwxr-xr-x 4 root root 4096 Jan 13 07:04 libdrwxr-xr-x 1 root root 4096 Jan 13 07:04 ref
bin目录
# tree -N ./bin./bin├── m2.conf├── mvn├── mvn.cmd├── mvnDebug├── mvnDebug.cmd└── mvnyjp
该目录包含了mvn运行的脚本,带cmd的是基于Windows平台的bat脚本,不带的是基于UNIX平台的Shell脚本。
这些脚本用来配置Java命令,准备classpath和相关的Java系统属性,然后执行Java命令。
带Debug的文件,只是多了条MAVEN_DEBUG_OPTS配置:
# cat mvnDebug
![05d3048a811f47bf5ab9dee6b6010355.png](https://img-blog.csdnimg.cn/img_convert/05d3048a811f47bf5ab9dee6b6010355.png)
其作用就是在运行Maven时开启debug,以便调试Maven本身。
m2.conf是classworlds的配置文件:
![cb12162db1d2f331d52d16a21f2d7239.png](https://img-blog.csdnimg.cn/img_convert/cb12162db1d2f331d52d16a21f2d7239.png)
boot目录
# tree -N bootboot├── plexus-classworlds-2.6.0.jar└── plexus-classworlds.license0 directories, 2 files
plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。
需要的话可以看看这边,一般用户不必太关心这个文件https://github.com/codehaus-plexus/plexus-classworldsorg.codehaus.plexus plexus-classworlds 2.6.0
conf目录
# tree confconf├── logging│ └── simplelogger.properties├── settings.xml└── toolchains.xml
settings.xml非常重要,控制Maven的行为。
这儿的配置是全局的,最好是复制为~/.m2/settings.xml,在用户范围定制Maven的行为。
lib目录
![292ef32505bb55121290dfc8c1a815d6.png](https://img-blog.csdnimg.cn/img_convert/292ef32505bb55121290dfc8c1a815d6.png)
lib目录包含了所有Maven运行时需要的Java类库。
其中,maven-model-builder-3.6.3.jar中有超级POM, 我们可以解压出来看看:
cp /usr/share/maven/lib/maven-model-builder-3.6.3.jar /usr/src/mymaven
在宿主机解压后,可以在maven-model-builder-3.6.3/org/apache/maven/model目录中找到pom.xml,即超级POM。
![55fb49eb013ad7fe1e7096414bd11eda.png](https://img-blog.csdnimg.cn/img_convert/55fb49eb013ad7fe1e7096414bd11eda.png)