maven如何配置打包目录 (maven安装及配置教程)

准备环境

直接拉取使用现成的镜像吧:

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 -al
total 60
drwxr-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.txt
drwxr-xr-x 2 root root  4096 Jan 13 07:04 bin
drwxr-xr-x 2 root root  4096 Jan 13 07:04 boot
drwxr-xr-x 1 root root  4096 Feb  1 06:55 conf
drwxr-xr-x 4 root root  4096 Jan 13 07:04 lib
drwxr-xr-x 1 root root  4096 Jan 13 07:04 ref

有四个目录

drwxr-xr-x 2 root root  4096 Jan 13 07:04 bin
drwxr-xr-x 2 root root  4096 Jan 13 07:04 boot
drwxr-xr-x 1 root root  4096 Feb  1 06:55 conf
drwxr-xr-x 4 root root  4096 Jan 13 07:04 lib
drwxr-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

maven打包文件目录,maven项目bin目录

其作用就是在运行Maven时开启debug,以便调试Maven本身。

m2.conf是classworlds的配置文件:

maven打包文件目录,maven项目bin目录

boot目录

# tree -N boot
boot
├── plexus-classworlds-2.6.0.jar
└── plexus-classworlds.license
0 directories, 2 files

plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。

需要的话可以看看这边,一般用户不必太关心这个文件
https://github.com/codehaus-plexus/plexus-classworlds
<!-- https://mvnrepository.com/artifact/org.codehaus.plexus/plexus-classworlds -->
<dependency>
    <groupId>org.codehaus.plexus</groupId>
    <artifactId>plexus-classworlds</artifactId>
    <version>2.6.0</version>
</dependency>

conf目录

# tree conf
conf
├── logging
│   └── simplelogger.properties
├── settings.xml
└── toolchains.xml

settings.xml非常重要,控制Maven的行为。这儿的配置是全局的,最好是复制为~/.m2/settings.xml,在用户范围定制Maven的行为。

lib目录

maven打包文件目录,maven项目bin目录

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。

maven打包文件目录,maven项目bin目录