Maven知识汇总

修改远程仓库地址

中央仓库(Maven Central Repository)

Maven有一个默认的远程仓库,id为central,是Apache搭建的,默认情况下都会去这个仓库查找获取文件,因为服务器在国外,所以速度很感人,因此通常我们会使用国内的库来代替中央仓库。

镜像(mirror)

Maven提供了一个映射机制来实现远程仓库的切换,使用时要配置该镜像的被映射目标对象,可以是一个或多个,*为全部映射,当请求被映射的仓库,会从之前的仓库切到该镜像中的仓库地址进行查找获取文件,从而达到切换远程仓库的目的。

可以同时配置多个mirror,但镜像匹配顺序是按照mirror的配置顺序依次匹配的,前面的mirror匹配成功,则后面的mirror不会生效,因此,不能用mirror来实现配置多个仓库,mirror的作用主要是用于仓库加速。

配置格式:在maven的settings.xml文件中进行如下配置:

<mirrors>
  <mirror>
	<!--该镜像的id-->
    <id>nexus-aliyun</id>
    <!--被该镜像映射的远程仓库,central是中央仓库的id,即我们将中央仓库映射到了阿里云的仓库-->
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <!--该镜像的仓库地址,这里是用的阿里的仓库-->
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
  </mirror>
</mirrors>

对于各配置项,官方解释:

  • id, name: The unique identifier and user-friendly name of this mirror. The id is used to differentiate between mirror elements and to pick the corresponding credentials from the `` section when connecting to the mirror.
  • url: The base URL of this mirror. The build system will use this URL to connect to a repository rather than the original repository URL.
  • mirrorOf: The id of the repository that this is a mirror of. For example, to point to a mirror of the Maven central repository (https://repo.maven.apache.org/maven2/), set this element to central. More advanced mappings like repo1,repo2 or *,!inhouse are also possible. This must not match the mirror id.

说明:

  1. id是镜像的唯一标识符;
  2. mirrorOf配置的是被映射仓库的规则,例如需要将中央仓库central映射到其它第三方库,则mirrorOf配置central
  3. 要将所有仓库都进行映射则mirrorOf配置*
  4. 如果要将repo1和repo2两个仓库都进行映射,则mirrorOf配置repo1,repo2
  5. 如果要将除inhouse仓库外其它所有仓库进行映射,则mirrorOf配置*,!inhouse
  6. 需要注意的是,mirrorOf中配置的id不能和mirror id相同,否则会出问题,所以在设置仓库的id和镜像的id时注意区分;

配置多个仓库

通常公司内部会搭建自己的Maven仓库,里面会发布一些内部软件包,所以我们可能需要配置多个仓库。

多个仓库的配置如下:

<profiles>
    <profile>
        <id>snapshots</id>
        <activation>
        <activeByDefault>true</activeByDefault>
        </activation>

        <repositories>
            <!--仓库1-->
            <repository>
                <id>nexus-aliyun</id>
                <url>http://maven.aliyun.com/nexus/content/groups/public</url>
            </repository>
            <!--仓库2-->
            <repository>
                <!--仓库唯一id-->
                <id>nexus-myself</id>
                <url>http://localhost:8080/nexus/content/groups/public</url>
                <snapshots>
                <!--是否启用-->
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

说明:

  • updatePolicy说明:

    <!--
    每次执行构建命令时, Maven 会比较本地 POM 和远程 POM 的时间戳, 该元素指定比较的频率。
    | 有效选项是: 
    |     always(每次构建都检查), daily(默认, 距上次构建检查时间超过一天), interval: x(距上次构建检查超过 x 分钟)、 never(从不)
    |
    | 重要: 
    |     设置为 daily, 如果 artifact 一天更新了几次, 在一天之内进行构建, 也不会从仓库中重新获取最新版本
    -->
    
  • 配置多个仓库时,使用的优先级为配置顺序从上到下,第一个查找不到,则从接下来的仓库中查找,直至中央仓库,上面配置的仓库使用顺序为nexus-myself -> nexus-aliyun -> central

设置工程源目录

Maven通常将src/main/javasrc/main/resources作为默认的源目录,并且只会编译src/main/java中的java文件,如果有xml等文件就会被忽略,然而有时我们又需要在src/main/java中放置一些其他类型文件,例如放置mybatis的mapper映射文件。

我们可以通过设置resources标签来控制编译的源目录

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <!--设置需要包含的其它文件类型的路径及后缀-->
            <!--**表示所有层级目录,*Mapper.xml表示文件名以Mapper结尾的所有xml文件-->
            <includes>
                <include>**/*Mapper.xml</include>
            </includes>
        </resource>
        <!--手动设置resources后,resources目录不会被默认编译,也需要手动设置-->
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

基于Maven的web工程目录结构

src
--main
----java
------com.xxx.xxx
------WebContent
--------META-INF
----------MANIFEST.MF
--------WEB-INF
----------lib
----------web.xml
----resources
--test
----java
------com.xxx.xxx
target
pom.xml

其中src/main/java、src/main/resources、src/test/java为工程源目录。

使用中的问题记录

无效的目标发行版: 1.8

遇到此问题需要确认各个部位使用的Java版本是否一致:

  1. IDE的使用的JDK版本;
  2. 环境变量中的Java版本;
  3. 如果是Eclipse,那么run configurations => maven build,选中下面的命令,里面的JRE也需要设置为一致版本的Java;

Unsupported major.minor version 51.0

org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0


-Dmaven.multiModuleProjectDirectory system property is not set.

这种情况是因为虚拟机运行参数没有设置maven的环境变量,解决方案如下:

一、在环境变量的系统变量中设置M2_HOME变量,值就是Maven的安装路径

二、如果是Eclipse可如下设置:

install jre -> edit -> default vm arguments添加**-Dmaven.multiModuleProjectDirectory=$M2_HOME**


程序包com.sun.org.apache.xml.internal.security.utils不存在

问题原因:代码中使用了sun公司的第三方私有库,导致编译不通过

在pom文件中加入如下代码:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>${project.build.sourceEncoding}</encoding>
        <!--配置编译参数-->
        <compilerArguments>
            <verbose />
            <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
        </compilerArguments> 
    </configuration>
</plugin>

注意:中路径的分隔符,在Windows下是“;”,在Linux下是“:”。

原文链接:https://www.cnblogs.com/xiluhua/p/5621279.html


Maven工程控制台输出中文乱码

在pom.xml的properties标签下加入如下元素即可解决

<argLine>-Dfile.encoding=UTF-8</argLine>

使用命令行创建简单Java项目

mvn archetype:generate -DinteractiveMode=false -DarchetypeCatalog=internal -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DgroupId=com.dongrui.study_poi -DartifactId=study-poi -Dpackage=com.dongrui.study_poi -Dversion=1.0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 Maven 需要有一定的 Java 编程基础,对于 Maven 的概念和使用方式也需要有一定的了解。另外,需要了解如何编写和管理项目依赖,以及如何使用 Maven 插件等。如果你之前没有接触过 Maven,建议先了解一些基本的概念和使用方法,例如 Maven 的生命周期、坐标、仓库等。 ### 回答2: 学习Maven需要一些基础知识。首先,需要了解Java编程语言和软件开发的基本概念和原理,以便理解Maven的作用和使用方式。其次,需要熟悉命令行操作以及基本的项目管理和构建知识,这有助于更好地使用Maven进行项目构建和管理。另外,了解项目构建管理工具的基本概念和工作原理也是必要的,这样能更好地理解Maven的工作方式和特点。最后,掌握XML的基本知识也是必要的,因为Maven项目的配置文件pom.xml采用XML格式进行编写和管理。当然,对于初学者来说,这些基础知识可以通过学习和实践逐步掌握,同时也可以通过查阅相关的文档和资料来加深理解。总之,学习Maven需要一些基础知识,但通过积极学习和实践,初学者也能逐步掌握并运用好这个项目构建管理工具。 ### 回答3: 学习Maven并不需要太多的基础知识,但有一些基本的编程和项目管理概念对于理解和使用Maven是很有帮助的。 首先,对Java编程语言有一定的了解是必要的,因为Maven主要用于构建和管理Java项目。了解Java的基础语法、面向对象编程原理以及常用的Java开发工具,能更好地理解和使用Maven。 其次,对于项目管理的基本概念也是必备的。Maven是一个强大的项目管理工具,能够帮助我们自动化构建、测试、打包和部署项目。了解项目的生命周期、依赖管理、版本控制以及发布流程等概念,可以更好地理解和使用Maven的各种功能。 另外,了解一些常用的构建工具和持续集成工具也是有益的。Maven与其他构建工具(如Ant)和持续集成工具(如Jenkins)有很好的兼容性和集成性,对它们有一定的了解可以更好地搭配使用Maven进行项目构建和持续集成。 总结来说,学习Maven需要有一定的Java编程基础、项目管理概念以及对一些相关的构建和持续集成工具的了解,这样才能更好地理解和使用Maven的各种功能,提高项目管理和开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值