这里就不一个一个说明了,只讲几个重要的,其他的用到的时候可以在下面搜索
在一般的项目中,我们用 spring MVC 的模式搭建的结构差不多是这样
但随着项目的进行,你可能会遇到如下问题:
所以可以看到一些大型项目的目录结构是这样的:

<modules>
<module>ruoyi-adminmodule>
<module>ruoyi-frameworkmodule>
<module>ruoyi-systemmodule>
<module>ruoyi-quartzmodule>
<module>ruoyi-generatormodule>
<module>ruoyi-commonmodule>
modules>
想象这样一个场景,有三个项目A、B、C,它们都需要用到同一个 jar包:common.jar。如果分别在三个项目的pom文件中定义各自对common.jar的依赖,那么当common.jar的版本发生变化时,三个项目的pom文件都要改,项目越多要改的地方就越多,很麻烦。
这时候就需要用到parent标签, 我们创建一个parent项目,打包类型为pom(parent项目只能是pom,不包含任何代码),parent项目中不存放任何代码,只是管理多个项目之间公共的依赖。在parent项目的pom文件中定义对common.jar的依赖,ABC三个子项目中只需要在parent标签中写上parent项目的pom坐标就可以引用到common.jar了。
parent 中的 pom.xml
<groupId>com.baidugroupId>
<artifactId>baidu-aiartifactId>
<version>1.0.0version>
<packaging>pompackaging>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.5.RELEASEversion>
<relativePath/>
parent>
子模块中的 pom.xml
<parent>
<groupId>com.baidugroupId>
<artifactId>baidu-aiartifactId>
<version>1.0.0version>
parent>
setting.xml和pom.xml都是Maven项目的配置文件,但它们的功能和用途有所不同。
setting.xml是Maven的全局配置文件,通常位于Maven安装目录下的conf文件夹中。它包含了Maven运行时需要用到的各种配置信息,例如本地仓库的位置、服务器的配置、邮件通知的配置等。这些配置信息对于所有的Maven项目都适用,因此它们被放在全局的setting.xml文件中。在多个Maven项目中使用相同的配置可以确保这些项目具有一致的环境和行为。
pom.xml是Maven项目的项目配置文件,通常位于项目的根目录下。它包含了项目的各种信息,如项目坐标、依赖关系、开发者规则、缺陷管理系统、组织和许可证等。这些信息只适用于当前的项目,因此它们被放在项目的pom.xml文件中。在多个项目中,每个项目都有自己的pom.xml文件,用于描述该项目的独特属性和行为。
在功能上,setting.xml和pom.xml的区别在于它们包含的配置信息不同。setting.xml包含的是全局的配置信息,而pom.xml则包含的是项目的特定信息。在使用时,这两个文件需要一起考虑,以确定项目的完整配置。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.baidugroupId>
<artifactId>trade-coreartifactId>
<name>trade-corename>
<version>1.0.0version>
<description>这是项目描述description>
<packaging>jarpackaging>
<classifier>jdk15classifier>
<modules>
<module>baidu-commonmodule>
<module>baidu-aimodule>
modules>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.13.RELEASEversion>
<relativePath/>
parent>
<dependencies>
<dependency>
<groupId>com.winner.tradegroupId>
<artifactId>trade-testartifactId>
<version>1.0.0-SNAPSHOTversion>
<scope>testscope>
<optional>falseoptional>
<exclusions>
<exclusion>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
exclusion>
exclusions>
dependency>
dependencies>
<properties>
<file.encoding>UTF-8file.encoding>
<java.version>1.8java.version>
<mysql.version>8.0.22mysql.version>
properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.1version>
<configuration>
<source>${java.version}source>
<target>${java.version}target>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-surefire-pluginartifactId>
<version>2.12.4version>
<configuration>
<skipTests>trueskipTests>
configuration>
plugin>
plugins>
build>
...
project>
<build>
<finalName>myPorjectNamefinalName>
<directory>${basedir}/targetdirectory>
<defaultGoal>installdefaultGoal>
<filters>
<filter>../filter.propertiesfilter>
filters>
<resources>
<resource>
<targetPath>resourcestargetPath>
<filtering>truefiltering>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<excludes>
<exclude>jdbc.propertiesexclude>
excludes>
resource>
resources>
<testResources>
<testResource>
<targetPath />
<filtering />
<directory />
<includes />
<excludes />
testResource>
testResources>
<sourceDirectory>${basedir}\src\main\javasourceDirectory>
<!--项目脚本源码目录,该目录和源码目录不同,
<testSourceDirectory>${basedir}\src\test\javatestSourceDirectory>
<outputDirectory>${basedir}\target\classesoutputDirectory>
<testOutputDirectory>${basedir}\target\test-classes
testOutputDirectory>
<extensions>
<extension>
<groupId>org.apache.maven.wagongroupId>
<artifactId>wagon-sshartifactId>
<version>2.8version>
extension>
extensions>
<plugins>
<plugin>
<groupId>groupId>
<artifactId>maven-assembly-pluginartifactId>
<version>2.5.5version>
<executions>
<execution>
<id>assemblyid>
<phase>packagephase>
<goals>
<goal>singlegoal>
goals>
<inherited>falseinherited>
execution>
executions>
<configuration>
<finalName>${finalName}finalName>
<appendAssemblyId>falseappendAssemblyId>
<descriptor>assembly.xmldescriptor>
configuration>
<extensions>falseextensions>
<dependencies>
<dependency>...dependency>
dependencies>
<inherited>trueinherited>
plugin>
plugins>
<pluginManagement>
<plugins>...plugins>
pluginManagement>
build>
pom里面的仓库与setting.xml里的仓库功能是一样的。主要的区别在于,pom里的仓库是个性化的。比如一家大公司里的setting文件是公用的,所有项目都用一个setting文件,但各个子项目却会引用不同的第三方库,所以就需要在pom里设置自己需要的仓库地址。
<distributionManagement>
<repository>
<uniqueVersion>trueuniqueVersion>
<id> repo-id id>
<name> repo-namename>
<url>file://${basedir}/target/deploy url>
<layout />
repository>
<snapshotRepository>
<uniqueVersion />
<id />
<name />
<url />
<layout />
snapshotRepository>
<site>
<id> site-id id>
<name> site-namename>
<url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web url>
site>
<downloadUrl />
<relocation>
<groupId />
<artifactId />
<version />
<message />
relocation>
<status />
distributionManagement>
<repositories>
<repository>
<releases>
<enabled />
<updatePolicy />
<checksumPolicy />
releases>
<snapshots>
<enabled />
<updatePolicy />
<checksumPolicy />
snapshots>
<id> repo-id id>
<name> repo-namename>
<url>http://192.168.1.169:9999/repository/ url>
<layout> defaultlayout>
repository>
repositories>
<pluginRepositories>
<pluginRepository />
pluginRepositories>
<profiles>
<profile>
<activation>
<activeByDefault>falseactiveByDefault>
<jdk>1.7jdk>
<os>
<name>Windows XPname>
<family>Windowsfamily>
<arch>x86arch>
<version>5.1.2600version>
os>
<property>
<name>mavenVersionname>
<value>2.0.3value>
property>
<file>
<exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/exists>
<missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/missing>
file>
activation>
<id />
<build />
<modules />
<repositories />
<pluginRepositories />
<dependencies />
<reporting />
<dependencyManagement />
<distributionManagement />
<properties />
profile>
profiles>
profile配置项在setting.xml中也有,是pom.xml中profile元素的裁剪版本,包含了id,activation, repositories, pluginRepositories和 properties元素。这里的profile元素只包含这五个子元素是因为setting.xml只关心构建系统这个整体(这正是settings.xml文件的角色定位),而非单独的项目对象模型设置。如果一个settings中的profile被激活,它的值会覆盖任何其它定义在POM中或者profile.xml中的带有相同id的profile。
pom.xml中的profile可以看做pom.xml的副本,拥有与pom.xml相同的子元素与配置方法。它包含可选的activation(profile的触发器)和一系列的changes。例如test过程可能会指向不同的数据库(相对最终的deployment)或者不同的dependencies或者不同的repositories,并且是根据不同的JDK来改变的。只需要其中一个成立就可以激活profile,如果第一个条件满足了,那么后面就不会在进行匹配。
<reporting>
<excludeDefaults />
<outputDirectory />
<plugins>
<plugin>
<groupId />
<artifactId />
<version />
<inherited />
<configuration>
<links>
<link>http://java.sun.com/j2se/1.5.0/docs/api/link>
links>
configuration>
<reportSets>
<reportSet>
<id>sunlinkid>
<configuration />
<inherited />
<reports>
<report>javadocreport>
reports>
reportSet>
reportSets>
plugin>
plugins>
reporting>
<issueManagement>
<system> jira system>
<url> http://jira.clf.com/url>
issueManagement>
<ciManagement>
<system />
<url />
<notifiers>
<notifier>
<type />
<sendOnError />
<sendOnFailure />
<sendOnSuccess />
<sendOnWarning />
<address />
<configuration />
notifier>
notifiers>
ciManagement>
<name>banseon-maven name>
<url>http://www.clf.com/ url>
<description>A maven project to study maven. description>
<prerequisites>
<maven />
prerequisites>
<inceptionYear />
<mailingLists>
<mailingList>
<name> Demo name>
<post> clf@126.compost>
<subscribe> clf@126.comsubscribe>
<unsubscribe> clf@126.comunsubscribe>
<archive> http:/hi.clf.com/archive>
mailingList>
mailingLists>
<developers>
<developer>
<id> HELLO WORLD id>
<name> banseon name>
<email> banseon@126.comemail>
<url />
<roles>
<role> Project Managerrole>
<role>Architect role>
roles>
<organization> demoorganization>
<organizationUrl>http://hi.clf.com/ organizationUrl>
<properties>
<dept> No dept>
properties>
<timezone> -5timezone>
developer>
developers>
<contributors>
<contributor>
<name />
<email />
<url />
<organization />
<organizationUrl />
<roles />
<timezone />
<properties />
contributor>
contributors>
<licenses>
<license>
<name> Apache 2 name>
<url>http://www.clf.com/LICENSE-2.0.txt url>
<distribution> repodistribution>
<comments> Abusiness-friendly OSS license comments>
license>
licenses>
<scm>
<connection>scm:svn:http://svn.baidu.com/banseon/maven/connection>
<developerConnection>scm:svn:http://svn.baidu.com/banseon/maven/
developerConnection>
<tag />
<url> http://svn.baidu.com/banseonurl>
scm>
<organization>
<name> demo name>
<url> http://www.clf.com/url>
organization>