Maven 入门

Maven依赖的optional元素

假如你的Project A的某个依赖D添加了<optional>true</optional>,当别人通过pom依赖Project A的时候,D不会被传递依赖进来

当你依赖某各工程很庞大或很可能与其他工程的jar包冲突的时候建议加上该选项,可以节省开销,同时减少依赖冲突

Maven 依赖中 scope 详解

https://www.jianshu.com/p/a9bd44a83dc5

maven中plugins和pluginmanagement的区别

版权声明:本文为CSDN博主「joenqc」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/joenqc/article/details/54910629

stackoverflow中讲的不错

http://stackoverflow.com/questions/10483180/maven-what-is-pluginmanagement

 

pluginmanagement标签一般用在父pom中,子元素可以包含plugins插件,比如

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <attach>true</attach>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</pluginManagement>

然后,在子pom文件中就可以这样使用:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
    </plugin>
</plugins>

省去了版本、配置等信息,只需指定groupId和artifactId即可。

但是在父pom中,如果使用这个标签来包裹plugins插件,当在此项目根目录运行对应的mvn命令时,如果在子pom中没有直接像上面再次引用这个plugin,那么不会触发这个plugin插件,只有在子pom中再次引用了之后,才会在对应的子项目路径下触发这个plugin.

plugins和pluginManagement标签都需要在build标签中。

Maven 在 pom.xml 文件中配置 repositories 仓库

如果你希望在你的项目中使用独立的 repositories 。

例如,你希望配置使用自己的 https://maven.ossez.com/repository/internal 作为仓库。

例如,修改后的 pom.xml 文件如下:

 <repository>
     <id>maven-ossez</id>
     <name>OSSEZ Repository</name>
     <url>https://maven.ossez.com/repository/internal</url>
 </repository>
 <pluginRepository>
     <id>maven-ossez</id>
     <name>OSSEZ Repository</name>
     <url>https://maven.ossez.com/repository/internal</url>
     <snapshots>
         <enabled>true</enabled>
     </snapshots>
 </pluginRepository>

Ubuntu IntelliJ Maven安装和配置

下载Maven包

maven3.x版本的jdk必须在1.7及以上,我的是jdk1.8

下载3.5.2版本apache-maven-3.5.2-bin.tar.gz 

sudo tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /usr/local/

配置Maven镜像

cd /usr/BigData/maven/conf/
sudo gedit ./settings.xml
 
#替换<mirrors>
 <mirrors>
        <mirror>  
            <id>alimaven</id>  
            <name>aliyun maven</name>  
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
            <mirrorOf>central</mirrorOf>          
        </mirror>  
</mirrors>

配置环境变量

# sudo gedit ~/.bashrc
#加入
export M2_HOME=/usr/local/apache-maven-3.6.3
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=$PATH:$M2_HOME/bin
#保存执行
# source ~/.bashrc 

检查是否安装成功

mvn -version

修改IntellJ配置

 Intellij IDEA ,File->Setting->左上角搜索maven

修改下三个目录

 

 Always update snapshots:总是使用最新的快照

Nexus私服

简介

Maven是一个采用纯Java编写的开源项目管理工具, Maven采用了一种被称之为Project Object Model(POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。目前Apache下绝大多数项目都已经采用Maven进行管理. 而Maven本身还支持多种插件, 可以方便更灵活的控制项目, 开发人员的主要任务应该是关注商业逻辑并去实现它, 而不是把时间浪费在学习如何在不同的环境中去依赖jar包,项目部署等。

maven和ant都是软件构建工具(软件管理工具),maven比ant更加强大,已经取代了ant,jar包的声明式依赖描述。maven有jar包的仓库。svn是一个软件的版本控制工具,是一个协同开发工具。svn的仓库存放的是项目的源码,历史版本的备份,声明每次版本的修改情况。

私服搭建场景

有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。

如果某个IP地址恶意的下载中央仓库内容,例如全公司100台机器使用同一个IP反复下载,这个IP(甚至是IP段)会进入黑名单,因此稍有规模的使用Maven时,应该用Nexus架设私服。

基于Docker安装Nexus

docker hub地址:https://hub.docker.com/r/sonatype/nexus3

docker 方式启动

sudo docker pull sonatype/nexus3
docker run -d -p 8081:8081 --name nexus sonatype/nexus3

docker-compose 方式启动

# cat docker-compose.yml 
version: '3.1'
services:
  nexus:
    restart: always
    image: shifudao/nexus3
    container_name: nexus
    ports:
      - 8081:8081
    volumes:
      - /usr/local/docker/nexus/data:/nexus-data

在项目中使用私服

在Maven settings.xml中添加Nexus认证信息

    <server>
        <id>nexus-release</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
    <server>
        <id>nexus-snapshots</id>
        <username>admin</username>
        <password>admin123</password>
    </server>

Snapshots与Releases的区别

  • nexus-release:用于发布Release版本
  • nexus-snapshots:用于发布snapshot版本(快照版)

Release版本与Snapshot定义如下

  • Release: 1.0.0/1.0.0-Release
  • Snapshot:1.0.0-Snapshot

在项目pom.xml中设置的版本好添加SNAPSHOT标识的都会发布为Snapshot版本,没有Snapshot标识的发布为Release版本

配置自动化部署

上传到私服

在pom.xml中添加如下代码:

    <distributionManagement>
        <repository>
            <id>nexus-release</id>
            <name>Nexus Release Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-release</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Snapshot Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-snapshots</url>
        </snapshotRepository>
    </distributionManagement>

 

注意事项:

  • ID名称必须要与setting.xml中Servers配置的ID名称保持一致
  • 项目版本号中有SNAPSHOT标识的,会发布到Nexus Snapshot Repository,否则发布到 Nexus Release Repository

部署到仓库

mvn deploy

配置代理仓库

项目中的依赖从私服下载

  • 私服中没有,私服从中央仓库下载,然后从私服下载
    <repositories>
        <repository>
            <id>nexus</id>
            <name>Nexus Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-public</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>nexus</id>
            <name>Nexus Plugin Repository</name>
            <url>http://127.0.0.1:8081/repository/maven-public</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>

 

问题汇总

Incorrect username or password, or no permission to use the application.

原文地址:https://blog.csdn.net/shen_yun2017/article/details/95347665

默认密码登录:admin/admin123

初始登录密码就在‘’/nexus-data/admin.password’文件里面

find / -name 'admin.password'

登录成功后会被强制要求修改密码

 

posted @ 2020-04-12 19:25  逐梦客!  阅读(116)  评论(0)    收藏  举报