本文主要目的: 为了让Maven管理项目的所有依赖包,Release和Snapshot .

本文涉及如下三点:

1.windows 下搭建Nexus Repository 3.6.0-02(linux下思路一样)

2.配置apache-maven-3.5.2中的settings和本地的local Repository

3.配置项目的pom.xml (介绍maven的插件,IDEA 打包[依赖包和项目包]等)


第一步:windows 下搭建Nexus Repository 3.6.0-02

1.1 进去官网  Apache Maven  点击打开链接下载  Nexus Repository Manager OSS 3.x - Windows  我下载的版本是 nexus-36.0.02-win64解压完后是下图两文件


下载完Nexus3.6.0后解压,得到如下目录结构: 
这里写图片描述 
看下官网对这两个文件夹的描述: 
这里写图片描述

After you extract the repository manager archive, two directories will appear:

Installation directory
----------------------

    This directory is contains the Nexus Repository Manager application and all the required additional components such as Java libraries and configuration files. The name of the directory by default uses nexus- and is appended with the version name. In this section, and throughout the book, it is referred to as $install-dir in any code segments.

Data directory
--------------

    This directory contains all the repositories, components and other data that are stored and managed by the repository manager. The default location of the data directory is  ../sonatype-work/nexus3 relative to the installation directory. In this section, and throughout the book, it is referred to as $data-dir in any code segments.
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

解压压缩文件后,得到两个文件夹:

安装目录

这个目录包含了Nexus仓库管理软件和所有必需的组件,例如Java库和配置文件等。这个目录默认以nexus-开始且后跟版本名,也就是nexus-3.6.0-02。在文档中,它就是 $install-dir的值。

数据目录

这个目录包含所有需要被Nexus仓库进行管理的的代理仓库,组件和数据。数据的默认位置是在/sonatype-work/nexus3下,在文档中,它就是 $data-dir的值。 
关于这两个目录下的文件夹的说明情况:https://help.sonatype.com/display/NXRM3/Directories

启动Nexus3.6.0

需要的JAVA环境:Nexus Repository Manager requires a Java 8 Runtime Environment (JRE) from Oracle.

在控制台进入nexus-3.6.0-02\bin下,执行:nexus.exe /run,会下载很多东西,当你看到 
这里写图片描述 
则表明你的Nexus3.6.0启动成功。

Nexus的默认服务端口为8081,打开浏览器,输入:localhost:8081即可进入Nexus管理系统。 
如果你的8081端口被占用,则进入nexus-3.6.0-02\etc下找到nexus-default.properties文件,打开修改端口号,保存,重新执行:nexus.exe /run

如果端口号没有被占用,则会看到如下界面: 
这里写图片描述
点击右上角的Sign in,默认的用户名是:admin,密码:admin123。 
官方文档描述如下: 
这里写图片描述
关于这个私服环境的介绍,推荐这篇博客http://blog.csdn.net/fygkchina/article/details/62976387

注册Nexus3.6.0服务

官方文档说明地址:https://help.sonatype.com/display/NXRM3/Run+as+a+Service

进入nexus-3.6.0-02\bin下执行:

nexus.exe /install <optional-service-name>
 
 
  • 1

optional-service-name是服务名称,可以随便起。 
完成后就可以在任务管理器中找到该服务: 
这里写图片描述 
我这里取名为nexus3.6。

可以通过执行:

nexus.exe /uninstall <optional-service-name>
 
 
  • 1

来注销服务,我试过了,好像并不能注销,妈蛋! 
成功注册服务之后,启动Nexus3.6.0就有两种办法了: 
(1)通过任务管理器来启动和关闭服务 (我喜欢安装成Windows的服务方便【我取名MyNexus】)
(2)通过在G:\nexus-3.6.0-02-win64\nexus-3.6.0-02\bin下执行:nexus.exe /start nexus3.6和nexus.exe /stop nexus3.6来启动和关闭该服务。

至此所有的nexus的本地搭建完成。后续项目通过nexus私服下载的jar包,都会缓存在sonatype-work的文件里

第二步:配置apache-maven-3.5.2和本地的local Repository

2.1 下载apache-maven-3.5.2  

进入Apache Maven 官网 点击打开链接下载  然后解压,并且在conf目录下复制一份settings-defineName.xml

解压后 我的conf目录下图

接下来就是配置settings-mengxp的配置。

2.2 配置settings-mengxp.xml

首先配置两个属性 

2.2.1 <localRepository>H:\source\local-repository</localRepository>

localRepository是项目需要的jar包保留在本地的maven-repo库的路径,自己定义一个文件夹即可.

2.2.2 

配置第一步中搭建的Nexus私服的地址。其中mirrorOf(默认值* 即可)  url 很重要。

<mirrorOf></mirrorOf>标签里面放置的是要被镜像的Repository ID。为了满足一些复杂的需求,Maven还支持更高级的镜像配置: 

  • <mirrorOf>*</mirrorOf> 

            匹配所有远程仓库。 

  • <mirrorOf>repo1,repo2</mirrorOf> 

            匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。 

  • <mirrorOf>*,!repo1</miiroOf> 

            匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除


Url:是2.1搭建的nexus私服地址。下图中的maven-public是建立的一个group,一个组能够存在多个Repository仓库。

<mirrors>
<mirror>
 <id>myNexus</id>
<mirrorOf>*</mirrorOf>
<name>mengxp_nexus</name>
<url>http://localhost:8081/repository/maven-public/</url>
</mirror>
</mirrors>


其他的具体参数可以参考 点击打开链接

第三步:配置项目的pom.xml  主要两种 单模块的Maven Pro和多模块的Maven Pro

当IDEA集成的maven插件,第一次运行时,需要将相关的插件plugins jar包下载在本地的local repo中。

3.1 单模块的maven项目的pom.xml,包含了所有常用的plugin插件的配置。

默认会在项目src同级目录下生成Target文件。里面存在着生成的lib conf bin 等文件夹。

bin:src/main/scripts 目录下的脚本copy到bin目录下。

conf:src/main/resources目录下的配置文件

lib:本项目的依赖包和项目jar()包都会存在lib目录下。

这里需要注意的是 lib下的会生成两个jar  第一个是jar包(*.class),第二个是源码包(里面是*.java)

FirstMavenProo-1.0-SNAPSHOT.jar 项目的jar包,不是依赖包(jar-with-dependencies)但是这个lib下存在他的依赖包。

下面3.2会配置打成依赖包的方式。




<?xml version="1.0" encoding="UTF-8"?>
<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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>FirstMavenPro</groupId>
    <artifactId>FirstMavenPro</artifactId>
    <packaging>pom</packaging>
    <version>all</version>
    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
    </dependencies>


    <!-- 配置打包的方式 -->
    <build>
        <!--打包前的各种source定义-->
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <!-- 把src/main/resources目录下所有的文件拷贝到conf目录中 -->
            <resource>
                <directory>src/main/resources</directory>
                <targetPath>${project.build.directory}/conf</targetPath>
            </resource>
            <!-- 把lib目录下所有的文件拷贝到lib目录中(可能有些jar包没有办法在maven中找到,需要放在lib目录中) -->
            <resource>
                <directory>lib</directory>
                <targetPath>${project.build.directory}/lib</targetPath>
            </resource>
            <!-- 把放在根目录下的脚本文件.sh,.bat拷贝到bin目录中 -->
            <resource>
                <directory>src/main/scripts</directory>
                <includes>
                    <include>*.sh</include>
                    <include>*.bat</include>
                </includes>
                <targetPath>${project.build.directory}/bin</targetPath>
            </resource>
        </resources>

        <!-- 所有的plugins -->
        <plugins>
            <!-- 1.用于编译的plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <fork>true</fork>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- 2.用于生成jar包的plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <!-- 把生成的jar包放在lib目录下(和其他所有jar包一起) -->
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                        </manifest>
                    </archive>
                    <excludes>
                        <!-- 排除掉一些文件,不要放到jar包中,
                        这里是为了排除掉src/main/resources中的文件(它们应该放到conf目录)
                        这里只能指定要排除的目标文件,而不能指定源文件,虽然不够完美,但是基本能达到目的。 -->
                        <exclude>*.xml</exclude>
                        <exclude>*.properties</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- 3.用于拷贝maven依赖(lib)的plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <!-- 把依赖的所有maven jar包拷贝到lib目录中(这样所有的jar包都在lib目录中) -->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- 4.用于拷贝resource文件夹 的plugin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <!-- 5.配置生成源代码jar的plugin[这里的源代码是指java文件,不是class文件]-->
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <attach>true</attach>
                    <!-- 配置源代码jar文件的存放路径,和其他jar文件一起放在lib目录 -->
                    <outputDirectory>${project.build.directory}/lib</outputDirectory>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <!-- 6.配置生成javaDoc.jar的plugin一般不需要-->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.2</version>
                <configuration>
                    <aggregate>true</aggregate>
                </configuration>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

3.2 是maven多模块的Pro 的pom.xml的配置

首先看大图我的项目存在两个模块


项目一的pom.xml 截图和具体的配置如下。  采用maven-assembly-plugin 配置满足了打成依赖包的方式 (jar-with-dependencies )


<?xml version="1.0" encoding="UTF-8"?>
<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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>maven-mult-modules</artifactId>
        <groupId>maven-mult-modules</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>OneModule</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- NOTE: We don't need a groupId specification because the group is
                    org.apache.maven.plugins ...which is assumed by default. -->
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <!--当仅仅需要打依赖包时,src/main/assembly/src.xml 不需要-->
                   <!-- <descriptors>
                        <descriptor>src/main/assembly/src.xml</descriptor>
                    </descriptors>-->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id> <!-- this is used for inheritance merges -->
                        <phase>package</phase> <!-- bind to the packaging phase -->
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>


项目二 采用maven-assembly-plugin
会将bin conf lib(包含了项目的依赖包和项目本身的jar(不是依赖包)) 包打成一个tar.gz 或者zip格式的压缩包,更加方便。

需要配置两个文件

1.src\main\assembly\assembly.xml 

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>all</id><!--可以随便定义的,会加载tar.gz包名后-->
    <formats>
        <format>tar.gz</format>
        <format>dir</format>
    </formats>
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>true</useProjectArtifact>
            <outputDirectory>lib</outputDirectory>
         </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README.txt</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>src/main/scripts</directory>
            <outputDirectory>/bin</outputDirectory>
            <fileMode>0777</fileMode>
        </fileSet>
        <fileSet>
            <directory>src/main/resources</directory>
            <outputDirectory>/config</outputDirectory>
            <excludes>
                <exclude>base.conf</exclude>
            </excludes>
            <fileMode>0644</fileMode>
        </fileSet>
    </fileSets>
</assembly>

2.pom的配置

<?xml version="1.0" encoding="UTF-8"?>
<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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>maven-mult-modules</artifactId>
        <groupId>maven-mult-modules</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>TwoModule</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.6.4</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                    <archive>
                        <manifest>
                            <mainClass/>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>




至此一般的基本的maven相关的项目应该都没有问题了。

后续的文章会继续写下去,介绍google 的protocolBuffer 和Hbase的协处理器具体的代码。

希望和大家一起进步。

Logo

更多推荐