搭建Nexus Repository 3.6.0-02和配置apache-maven-3.5.2和本地的local Repository以及项目的pom.xml(IDEA 打包等)
本文主要目的: 为了让Maven管理项目的所有依赖包,Release和Snapshot .本文涉及如下三点:1.windows 下搭建Nexus Repository 3.6.0-02(linux下思路一样)2.配置apache-maven-3.5.2中的settings和本地的local Repository3.配置项目的pom.xml (介绍maven的插件,IDEA 打包[依赖包和项目包]等
本文主要目的: 为了让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后解压,得到如下目录结构:
看下官网对这两个文件夹的描述:
- 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下执行:
- 1
optional-service-name是服务名称,可以随便起。
完成后就可以在任务管理器中找到该服务:
我这里取名为nexus3.6。
可以通过执行:
- 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的协处理器具体的代码。
希望和大家一起进步。
更多推荐
所有评论(0)