赞
踩
社区版功能不全。
mac版官网下载地址:Download IntelliJ Idea for Mac
选择Ultimate版。
参考文章:IDEA Eva Reset使用方法
下载安装这个插件后,在Help界面会在最下方有Eval Reset的操作选项,点击后勾选
maven的官网地址:maven.apache.org
点击Download,下载binary版本的tar.gz安装包。
解压后放到指定文件夹。
打开IDEA的设置界面(Win是Settings,Mac中是Preferences),Build,Execution,Deployment->Build Tools->Maven,可看Maven home path
中有IDEA默认的maven版本,将其替换为刚刚下载的maven的目录地址。
User settings file
指向的是IDEA中Maven的核心配置文件settings.xml,可看到默认是在一个.m2
的文件夹中。如若此前没有安装过maven,打开Finder查看目录时将发现没有.m2
这个文件夹。如何创建呢?当系统运行了mvn
命令后,将会自动创建.m2
文件夹。
但此时在终端直接运行mvn
命令,将会提示找不到此命令,原因是还未配置maven的环境变量。
1、打开终端,输入命令,编辑环境变量配置文件
vim ~/.bash_profile
2、定位到文件末尾,按i键进入编辑模式,输入以下内容,其中文件路径部分需替换为自己的路径(鼠标拖动文件即可直接在终端显示文件路径)
# Maven
export MAVEN_HOME=/Users/beckyyang/Maven/apache-maven-3.8.5
export PATH=$PATH:$MAVEN_HOME/bin
3、按Esc键退出编辑模式,然后输入:wq
,即保存并退出,回到终端
4、在终端输入以下命令后,按下Enter键使bash_profile生效
source .bash_profile
5、在终端输入mvn -v
验证是否配置成功
备注:在这里时遇到报错说JAVA_HOME环境变量没有正确地定义
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.
比对了一下,原来是因为不小心删除了JDK前面的一个小点……
再次输入mvn -v
,这次看到了成功配置的信息。
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: /Users/beckyyang/Maven/apache-maven-3.8.5
在终端执行以下命令:
mvn help:system
可以看到开始下载很多文件,等待一段时间,完成下载。
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10:11 min
[INFO] Finished at: 2022-03-31T22:32:28+08:00
[INFO] ------------------------------------------------------------------------
在终端输入命令
ls -a
可查看隐藏文件,可以看到.m2
文件夹。
进入.m2
查看有哪些文件
cd .m2
只显示有一个repository
文件夹,没有maven的核心配置文件settings.xml。
此时可以打开maven的包文件,打开conf文件夹,复制settings.xml文件到.m2
文件夹下即可。
.m2
是隐藏文件夹,不能在Finder中直接看到,可在终端中输入命令:
defaults write com.apple.finder AppleShowAllFiles TRUE
设置可见所有文件,再输入
killall Finder
重启Finder,即可看到隐藏文件夹。
再新建一个Finder窗口,将settings.xml文件复制过来即可。
localRepository:表示Maven在本地储存信息的本地仓库目录,一般会将路径替换为用户目录下面的……/.m2/repository
目录。
<localRepository>/path/to/local/repo</localRepository>
interactiveMode:默认是true,表示是否开启交互模式。如果设为false,那么当Maven需要用户进行输入的时候,它会使用一个默认值。
<interactiveMode>true</interactiveMode>
offline:默认是false,表示在Maven进行项目编译和部署等操作时是否允许Maven进行联网来下载所需要的信息。
<offline>false</offline>
pluginGroups:在pluginGroups元素下面可以定义一系列的pluginGroup元素。表示当通过plugin的前缀来解析plugin的时候到哪里寻找。pluginGroup元素指定的是plugin的groupId。默认情况下,Maven会自动把org.apache.maven.plugins和org.codehaus.mojo添加到pluginGroups下。
<pluginGroups>
<!-- pluginGroup
| Specifies a further group identifier to use for plugin lookup.
<pluginGroup>com.your.plugins</pluginGroup>
-->
</pluginGroups>
proxies:其下面可以定义一系列的proxy子元素,表示Maven在进行联网时需要使用到的代理。当设置了多个代理的时候第一个标记active为true的代理将会被使用。
<proxies> <!-- proxy | Specification for one proxy, to be used in connecting to the network. | <proxy> <id>optional</id> <active>true</active> <protocol>http</protocol> <username>proxyuser</username> <password>proxypass</password> <host>proxy.host.net</host> <port>80</port> <nonProxyHosts>local.net|some.host.com</nonProxyHosts> </proxy> --> </proxies>
servers:其下面可以定义一系列的server子元素,表示当需要连接到一个远程服务器的时候需要使用到的验证方式,主要有username/password和privateKey/passphrase这两种验证方式。
<servers> <!-- server | Specifies the authentication information to use when connecting to a particular server, identified by | a unique name within the system (referred to by the 'id' attribute below). | | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are | used together. | <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> --> <!-- Another sample, using keys to authenticate. <server> <id>siteServer</id> <privateKey>/path/to/private/key</privateKey> <passphrase>optional; leave empty if not used.</passphrase> </server> --> </servers>
mirrors:用于定义一系列的远程仓库的镜像,可缓解远程仓库的压力。但不能同时配置多个mirror的mirrorOf指向同一个repositoryId。
<mirrors>
<mirror>
<!--用于区别mirror,可自己更改-->
<id>aliyun</id>
<!--匹配中央仓库(指定阿里的仓库,不可改)-->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称,可自己更改-->
<name>aliyun-Mirror</name>
<!-- 镜像地址,不可更改-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
profiles:用于指定一系列的profile子元素。profile元素由activation、repositories、pluginRepositories和properties四个元素组成。当一个profile在settings.xml中是处于活动状态并且在pom.xml中定义了一个相同id的profile时,settings.xml中的profile会覆盖pom.xml中的profile。
参数 | 值 | 说明 |
---|---|---|
activeByDefault | true false | 当其值为true的时候表示如果没有其他的profile处于激活状态的时候,该profile将自动被激活。 |
jdk | 1.x | 表示当jdk的版本满足条件的时候激活该profile。 |
os | 指定参数name、family、arch、version的值 | 表示当操作系统满足条件的时候激活该profile。 |
property | 指定参数name、value的值 | property是键值对的形式,表示当Maven检测到了这样一个键值对的时候就激活该profile。 |
file | 指定参数exists、missing的值 | 表示当文件存在或不存在的时候激活,exists表示存在,missing表示不存在。 |
完整例子如下:
<profiles> <profile> <id>test</id> <activation> <activeByDefault>false</activeByDefault> <jdk>1.6</jdk> <os> <name>Windows 7</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> <property> <name>mavenVersion</name> <value>2.0.3</value> </property> <file> <exists>${basedir}/file2.properties</exists> <missing>${basedir}/file1.properties</missing> </file> </activation> ... </profile> </profiles>
<profile>
<id>jdk-1.8</id>
<!-- 开启编译器的使用-->
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<!-- 配置编译器信息-->
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
参数 | 值 | 说明 |
---|---|---|
enabled | true false | 表示这个仓库是否允许这种类型的工件。 |
updatePolicy | always daily interval:minutes(表示每多久更新一次) never | 表示多久尝试更新一次。 |
checksumPolicy | ignore fail warn | 当Maven在部署项目到仓库的时候会连同校验文件一起提交,checksumPolicy表示当这个校验文件缺失或不正确的时候该如何处理。 |
<repositories> <repository> <id>codehausSnapshots</id> <name>Codehaus Snapshots</name> <releases> <enabled>false</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>warn</checksumPolicy> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>never</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> <url>http://snapshots.maven.codehaus.org/maven2</url> <layout>default</layout> </repository> </repositories>
<!-- | Here is another profile, activated by the system property 'target-env' with a value of 'dev', | which provides a specific path to the Tomcat instance. To use this, your plugin configuration | might hypothetically look like: | | ... | <plugin> | <groupId>org.myco.myplugins</groupId> | <artifactId>myplugin</artifactId> | | <configuration> | <tomcatLocation>${tomcatPath}</tomcatLocation> | </configuration> | </plugin> | ... | | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to | anything, you could just leave off the <value/> inside the activation-property. -->
activeProfiles:包含一系列的activeProfile元素,表示对于所有的pom都处于活跃状态的profile。
<activeProfiles>
<activeProfile>alwaysActiveProfile</activeProfile>
<activeProfile>anotherAlwaysActiveProfile</activeProfile>
</activeProfiles>
默认的文件里有被注释掉的当地仓库路径
<localRepository>/path/to/local/repo</localRepository>
将里面的/path/to/local/repo替换为自己的路径即可,例:
<localRepository>/Users/beckyyang/.m2/repository</localRepository>
因为apache的仓库在国外,平时我们下载东西的时候速度会很慢,因此需要配置一个国内的镜像仓库。配置文件中镜像仓库的默认内容:
<mirrors> <!-- mirror | Specifies a repository mirror site to use instead of a given repository. The repository that | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used | for inheritance and direct lookup purposes, and must be unique across the set of mirrors. | <mirror> <id>mirrorId</id> <mirrorOf>repositoryId</mirrorOf> <name>Human Readable Name for this Mirror.</name> <url>http://my.repository.com/repo/path</url> </mirror> --> <mirror> <id>maven-default-http-blocker</id> <mirrorOf>external:http:*</mirrorOf> <name>Pseudo repository to mirror external repositories initially using HTTP.</name> <url>http://0.0.0.0/</url> <blocked>true</blocked> </mirror> </mirrors>
将里面的内容改为阿里云的镜像仓库地址
<mirrors>
<mirror>
<!-- 镜像ID可自己更改-->
<id>aliyun</id>
<!-- 匹配中央仓库(指定阿里的仓库,不可改)-->
<mirrorOf>central</mirrorOf>
<!-- 镜像名称,可自己更改-->
<name>aliyun-Mirror</name>
<!-- 镜像地址,不可更改-->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
在profile中配置jdk,如下
<profiles> <profile> <id>jdk-1.8</id> <!-- 开启编译器的使用--> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <!-- 配置编译器信息--> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles>
create new Project ——> Maven。
不勾选Create from archetype,IDEA会创建标准的Maven项目结构。
src/main/java
:存储java代码。
src/main/resources
:存储主要的资源文件,如xml配置文件、properties文件等。
src/test/java
:储存用于测试的类,如JUnit的测试一般就放在此目录下。测试类本身不属于项目,因此maven专门创建了一个测试包,用于存放测试的类。
src/test/resources
:存储测试环境用的资源文件。
src
:包含了项目所有的源代码和资源文件,以及其他项目相关的文件。
备注:在右侧的maven操作选项中点击install,将会在左侧目录中创建target文件夹。
target
:编译后内容放置的文件夹。
上图中左侧target目录下的jar包 MavenDemo-1.0-SNAPSHOT.jar 即为该项目的jar包,存放地址为本地仓库中(本地仓库地址/项目GroupId/项目ArtifactId
),本例即.m2/respository/com/ybq/MavenDemo
中。
Maven工具是基于POM模式实现的,在Maven中每个项目都相当于是一个对象,项目之间的关系有依赖、继承、聚合,可以让Maven项目更加方便地实现导就jar包、拆分项目等。
依赖
project
下的 <dependencies> 标签中,配置依赖信息,可以包含多个 <dependency> 。每个 <dependency> 都需要包含groupId、artifactId、version 信息,这是依赖的基本坐标,Maven根据坐标才能找到需要的依赖。compile
:默认范围,如果没有指定,就会使用该依赖范围,表示该依赖在编译和运行时都生效。provided
:已提供依赖范围。使用此依赖范围的Maven依赖典型例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,所以不需要Maven再重复引入。runtime
:表明编译时不需要生效,只在运行时生效。典型例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。system
:范围与provided类似,但必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库寻找它。但是,使用system范围依赖时必须通过systemPath元素显式指定依赖文件的本地路径。test
:表明使用该范围的依赖只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型例子是JUnit,只在测试阶段用,导出项目的时候没有必要导出Junit的东西,所以在JUnit的坐标下加入scope-test。import
:只适用于pom文件中的<dependencyManagement>部分,表明指定的POM必须使用<dependencyManagement>部分的依赖。注意:import只能用在<dependencyManagement>的scope里。继承
举例:父项目中在properties中设置一个标签叫banben,然后在dependencyManagement中设置version取banben的值,这样就实现了版本管理。其后的scope如果设值为import,则表明强制让子项目使用此版本的依赖。
<properties>
<banben>3.5.6</banben>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${banben}</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
子项目中:
<parent>
<artifactId>MavenDemo</artifactId>
<groupId>com.ybq</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../MavenDemo/pom.xml</relativePath>
</parent>
<denpendencies>
<denpendency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</denpendency>
</denpendencies>
举例,父项目pom.xml:
<groupId>com.ybq</groupId> <artifactId>ParentPro</artifactId> <version>1.0-SNAPSHOT</version> <!--定义为POM项目--> <packaging>pom</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <!-- 定义版本号--> <mybatis.version>3.5.6</mybatis.version> <spring.version>5.3.18</spring.version> </properties> <dependencyManagement> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> </dependencies> </dependencyManagement>
新建Module,输入子项目名称:
在子项目中添加父项目中的依赖,并用Maven工具中的reload刷新,可看到已经引用了父项目的此依赖。
再查看父项目中的pom.xml,可看到已自动添加了子模块代码。
未完待续……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。