maven&nexus

Maven常用命令: 
1. 创建Maven的普通java项目: 
   mvn archetype:create 
   -DgroupId=packageName 
   -DartifactId=projectName  
2. 创建Maven的Web项目:   
    mvn archetype:create 
    -DgroupId=packageName    
    -DartifactId=webappName 
    -DarchetypeArtifactId=maven-archetype-webapp    
3. 编译源代码: mvn compile 
4. 编译测试代码:mvn test-compile    
5. 运行测试:mvn test   
6. 产生site:mvn site   
7. 打包:mvn package   
8. 在本地Repository中安装jar:mvn install 
9. 清除产生的项目:mvn clean   
10. 生成eclipse项目:mvn eclipse:eclipse  
11. 生成idea项目:mvn idea:idea  
12. 组合使用goal命令,如只打包不测试:mvn -Dtest package   
13. 编译测试的内容:mvn test-compile  
14. 只打jar包: mvn jar:jar  
15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile 
      ( -skipping 的灵活运用,当然也可以用于其他组合命令)  
16. 清除eclipse的一些系统设置:mvn eclipse:clean 

ps:

一般使用情况是这样,首先通过cvs或svn下载代码到本机,然后执行mvn eclipse:eclipse生成ecllipse项目文件,然后导入到eclipse就行了;修改代码后执行mvn compile或mvn test检验,也可以下载eclipse的maven插件。

mvn -version/-v               显示版本信息 
mvn archetype:generate        创建mvn项目 
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app   创建mvn项目

mvn package              生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 
mvn jetty:run            运行项目于jetty上, 
mvn compile              编译 
mvn test                 编译并测试 
mvn clean                清空生成的文件 
mvn site                 生成项目相关信息的网站 
mvn -Dwtpversion=1.0 eclipse:eclipse        生成Wtp插件的Web项目 
mvn -Dwtpversion=1.0 eclipse:clean          清除Eclipse项目的配置信息(Web项目) 
mvn eclipse:eclipse                         将项目转化为Eclipse项目

在应用程序用使用多个存储库 
<repositories>    
    <repository>      
        <id>Ibiblio</id>      
        <name>Ibiblio</name>      
        <url>http://www.ibiblio.org/maven/</url>    
    </repository>    
    <repository>      
        <id>PlanetMirror</id>      
        <name>Planet Mirror</name>      
        <url>http://public.planetmirror.com/pub/maven/</url>    
    </repository>  
</repositories>


mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/


发布第三方Jar到本地库中:

mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar


-DdownloadSources=true

-DdownloadJavadocs=true

mvn -e              显示详细错误 信息. 
mvn validate        验证工程是否正确,所有需要的资源是否可用。 
mvn test-compile    编译项目测试代码。 。 
mvn integration-test     在集成测试可以运行的环境中处理和发布包。 
mvn verify               运行任何检查,验证包是否有效且达到质量标准。     
mvn generate-sources     产生应用需要的任何额外的源代码,如xdoclet。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lifxue/archive/2009/10/14/4662902.aspx

常用命令: 
mvn -v 显示版本 
mvn help:describe -Dplugin=help 使用 help 插件的  describe 目标来输出 Maven Help 插件的信息。 
mvn help:describe -Dplugin=help -Dfull 使用Help 插件输出完整的带有参数的目标列 
mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull 获取单个目标的信息,设置  mojo 参数和  plugin 参数。此命令列出了Compiler 插件的compile 目标的所有信息 
mvn help:describe -Dplugin=exec -Dfull 列出所有 Maven Exec 插件可用的目标 
mvn help:effective-pom 看这个“有效的 (effective)”POM,它暴露了 Maven的默认设置

mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook 创建Maven的普通java项目,在命令行使用Maven Archetype 插件 
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序 
mvn dependency:resolve 打印出已解决依赖的列表 
mvn dependency:tree 打印整个依赖树

mvn install -X 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行 
mvn install -Dmaven.test.skip=true 给任何目标添加maven.test.skip 属性就能跳过测试 
mvn install assembly:assembly 构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件

mvn jetty:run     调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用 
mvn compile       编译你的项目 
mvn clean install 删除再编译

mvn hibernate3:hbm2ddl 使用 Hibernate3 插件构造数据库






私服,私有服务器,是公司内部Maven项目经常需要的东东,不总结一下,不足以体现出重视。Nexus是常用的私用Maven服务器,一般是公司内部使用。下载地址是http://www.sonatype.org/nexus/go 。默认端口8081

常用功能

Nexus常用功能就是:指定私服的中央地址、将自己的Maven项目指定到私服地址、从私服下载中央库的项目索引、从私服仓库下载依赖组件、将第三方项目jar上传到私服供其他项目组使用。

开启Nexus服务后访问url地址http://localhost:8081/nexus/(推荐使用自己的ip地址),之后登录系统,用户名密码分别是:admin/admin123.

最频繁的就是点击左侧菜单栏的Repositories按钮




一般用到的仓库种类是hosted、proxy。Hosted代表宿主仓库,用来发布一些第三方不允许的组件,比如oracle驱动、比如商业软件jar包。Proxy代表代理远程的仓库,最典型的就是Maven官方中央仓库、JBoss仓库等等。如果构建的Maven项目本地仓库没有依赖包,那么就会去这个代理站点去下载,那么如果代理站点也没有此依赖包,就回去远程中央仓库下载依赖,这些中央仓库就是proxy。代理站点下载成功后再下载至本机。笔者认为,其实Maven这个自带的默认仓库一般情况下已经够大多数项目使用了。特殊情况时在配置新的仓库,指定url即可,一般熟悉ExtJS的人操作这个Nexus都没什么问题,单词不是很难,不明白的查查单词基本差不多。就是如果Sonatype公司对其做了国际化的处理就更好了。


hosted   类型的仓库,内部项目的发布仓库

releases 内部的模块中release模块的发布仓库

snapshots 发布内部的SNAPSHOT模块的仓库

3rd party 第三方依赖的仓库,这个数据通常是由内部人员自行下载之后发布上去

proxy   类型的仓库,从远程中央仓库中寻找数据的仓库

group   类型的仓库,组仓库用来方便我们开发人员进行设置的仓库



maven项目索引

下载Maven项目索引,项目索引是为了使用者能够在私服站点查找依赖使用的功能




保存后后台会运行一个任务,点击菜单栏的Scheduled Tasks选项即可看到有个任务在RUNNING。 下载完成后,Maven索引就可以使用了,在搜索栏输入要搜索的项,就可以查到相关的信息。例如spring-core




就可以检索出它的相关信息,包括怎么配置依赖信息。我们要想使用这个私服仓库,先在项目pom中配置相关私服信息

指定仓库

[html]  view plain copy
  1. <repositories>  
  2.         <repository>  
  3.             <id>nexus</id>  
  4.             <name>nexus</name>  
  5.             <url>http://192.168.1.103:8081/nexus/content/groups/public/</url>  
  6.             <releases>  
  7.                 <enabled>true</enabled>  
  8.             </releases>  
  9.             <snapshots>  
  10.                 <enabled>true</enabled>  
  11.             </snapshots>  
  12.         </repository>  
  13.     </repositories>  


指定插件仓库


[html]  view plain copy
  1. <pluginRepositories>  
  2.         <pluginRepository>  
  3.             <id>nexus</id>  
  4.             <name>nexus</name>  
  5.             <url>http://192.168.1.103:8081/nexus/content/groups/public/</url>  
  6.             <releases>  
  7.                 <enabled>true</enabled>  
  8.             </releases>  
  9.             <snapshots>  
  10.                 <enabled>true</enabled>  
  11.             </snapshots>  
  12.         </pluginRepository>  
  13.     </pluginRepositories>  

这样只有本项目才在私服下载组件
这样这个Maven项目构建的时候会从私服下载相关依赖。当然这个配置仅仅是在此项目中生效,对于其他项目还是不起作用。如果相对Maven的其他项目也生效的话。需要修改全局的settings.xml文件。

修改settings.xml为



追加激活profile

[html]  view plain copy
  1. <activeProfiles>  
  2.          <activeProfile>central</activeProfile>  
  3.           
  4.       </activeProfiles>  


之后所有本机的Maven项目就在私服下载组件。(这样比较好)


项目的发布

[html]  view plain copy
  1. <distributionManagement>  
  2.         <repository>  
  3.             <id>user-release</id>  
  4.             <name>User Project Release</name>  
  5.             <url>http://192.168.1.103:8081/nexus/content/repositories/releases/</url>  
  6.         </repository>  
  7.   
  8.         <snapshotRepository>  
  9.             <id>user-snapshots</id>  
  10.             <name>User Project SNAPSHOTS</name>  
  11.             <url>http://192.168.1.103:8081/nexus/content/repositories/snapshots/</url>  
  12.         </snapshotRepository>  
  13.     </distributionManagement>  

注意配置了还是发布项目到私服失败,原因为没有权限,会出现401错误码,原因就是权限不够。

配置权限在settings.xml





注意Respository中的id一定要和server下的id一致,切记!!否则出现权限问题。

然后运行发布

clean deploy

在控制台发布成功

然后进入到私服上的仓库中,看一下确实存在刚刚发布的项目








宿主库——3rd party

假如我们下载了Oracle的驱动程序jar包想给其他项目组使用,就需要上传该jar包。选中宿主库——3rd party,之后选择Artifact Upload上传至宿主空间。





最后点击上传





首先介绍一下背景,公司访问外网有限制,项目组大部分人员不能访问maven的central repository,因此在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上 

环境是:nexus-2.1.1、maven-3.0.4、jdk-1.6.0_32 

一、用admin用户登陆nexus 

nexus的下载和安装都很简单,网上也有很多介绍,本文就不重复了。主要介绍一下安装之后的配置 

nexus的配置需要用admin角色完成,默认的密码是admin123,进入nexus首页之后,点击右上角,进行登录 

 

然后就可以在左边的菜单中进行配置了 

 

二、为nexus配置代理服务器 

由于这台机器需要通过代理才能访问外网,所以首先要配置代理服务器,在Administration-->Server中进行配置 

 

配置之后,nexus才能连上central repository,如果私服所在机器可以直接上外网,则可以省略这一步 

三、配置repository 

在Views/Repositories-->Repositories里进行配置 

 

nexus里可以配置3种类型的仓库,分别是proxy、hosted、group 

proxy是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载,然后返回给用户,相当于起到一个中转的作用 

hosted是宿主仓库,用户可以把自己的一些构件,deploy到hosted中,也可以手工上传构件到hosted里。比如说oracle的驱动程序,ojdbc6.jar,在central repository是获取不到的,就需要手工上传到hosted里 

group是仓库组,在maven里没有这个概念,是nexus特有的。目的是将上述多个仓库聚合,对用户暴露统一的地址,这样用户就不需要在pom中配置多个地址,只要统一配置group的地址就可以了 

nexus装好之后,已经初始化定义了一些repository,我们熟悉之后,就可以自行删除、新增、编辑 

右边那个Repository Path可以点击进去,看到仓库中artifact列表。不过要注意浏览器缓存。我今天就发现,明明构件已经更新了,在浏览器里却看不到,还以为是BUG,其实是被浏览器缓存了 

四、配置Central Repository的proxy 

最关键的一个配置,可能就是Central Repository的proxy配置,因为大部分的构件,都是要通过这个proxy得到的 

 

在安装完nexus之后,这个proxy是预置的,需要做的就是把Download Remote Indexes改为true,这样nexus才会从central repository下载索引,才能在nexus中使用artifact search的功能 

网络上有一些其他公开的maven仓库,可以用同样的办法,在nexus中设置proxy,但是并不是所有maven仓库,都提供了nexus index,这种情况下,就无法建立索引了 

五、配置hosted repository 

一般会配置3个hosted repository,分别是3rd party、Snapshots、Releases,分别用来保存第三方jar(典型的比如ojdbc6.jar),项目组内部的快照、项目组内部的发布版 

 

这里并没有什么特别的配置,只是Deployment Policy这个选项,一般Snapshots会配置成允许,而Releases和3rd party会设置为禁止 

六、配置group repository 

前面说过,group其实是一个虚拟的仓库,通过对实体仓库(proxy、hosted)进行聚合,对外暴露一个统一的地址 

 

这里要注意的是,放到左边的仓库,才是会被聚合的仓库。我昨天一直搞错了,把仓库都放到右边,结果group什么都没有聚合到,是一个空的仓库。。。 

七、配置用户密码 

在Security-->Users中配置,在deployment用户上点击右键,选择Set Password,然后设置一个密码,做这个操作是为了后面提交做准备 

 

八、在用户机器上配置settings.xml 

经过前面的7个步骤,nexus就配置好了,接下来需要在每个开发人员的开发机器上进行配置了 

配置文件在%USER_HOME%/.m2/settings.xml 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"   
  4.           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
  6.    
  7.   <servers>  
  8.     
  9.     <server>  
  10.         <id>nexus-snapshots</id>  
  11.         <username>deployment</username>  
  12.         <password>deployment</password>  
  13.     </server>  
  14.   
  15.   </servers>  
  16.     
  17.   <mirrors>  
  18.     
  19.     <mirror>  
  20.         <id>nexus</id>  
  21.         <name>internal nexus repository</name>  
  22.         <url>http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/</url>  
  23.         <mirrorOf>central</mirrorOf>  
  24.     </mirror>  
  25.       
  26.   </mirrors>  
  27.     
  28. </settings>  

这里只配置了2个元素<mirrors>和<servers> 

首先这里配置了一个id为nexus的镜像仓库,地址是前面配置的public group的URL,然后镜像目标是central 

maven里的超级pom,里面配置了这样一段: 
Xml代码   收藏代码
  1. <repositories>  
  2.     <repository>  
  3.       <id>central</id>  
  4.       <name>Central Repository</name>  
  5.       <url>http://repo.maven.apache.org/maven2</url>  
  6.       <layout>default</layout>  
  7.       <snapshots>  
  8.         <enabled>false</enabled>  
  9.       </snapshots>  
  10.     </repository>  
  11.   </repositories>  
  12.   
  13.   <pluginRepositories>  
  14.     <pluginRepository>  
  15.       <id>central</id>  
  16.       <name>Central Repository</name>  
  17.       <url>http://repo.maven.apache.org/maven2</url>  
  18.       <layout>default</layout>  
  19.       <snapshots>  
  20.         <enabled>false</enabled>  
  21.       </snapshots>  
  22.       <releases>  
  23.         <updatePolicy>never</updatePolicy>  
  24.       </releases>  
  25.     </pluginRepository>  
  26.   </pluginRepositories>  

因此,当本地的maven项目,找不到需要的构件(包括jar包和插件)的时候,默认会到central里获取 

所以我们刚刚配置的镜像仓库,id也是central,这样本地maven项目对central repository的请求,就会转到镜像仓库上,也就是我们设置的nexus私服上 

由于我们在项目的pom里,不会再配置其他的<repositories>和<pluginRepositories>元素,所以只要配置一个central的mirror,就足以阻止所有的外网访问。如果pom中还配置了其他的外网仓库,比如jboss repository等,可以把<mirrorOf>改为* 

至于<servers>元素,是因为我们把项目内部的构件上传到nexus的仓库中时,nexus会进行权限控制,所以这里需要设置权限相关的信息。注意这里的<id>nexus-snapshots</id>,和后面maven工程里的pom设置是一致的 

由于我们这里已经屏蔽了对外网仓库的请求,所以就不需要配置代理服务器了,如果需要配置代理服务器,可以用<proxies>元素

九、配置maven项目的pom文件 

下面是简化后的pom文件: 
Xml代码   收藏代码
  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.   
  4.     <modelVersion>4.0.0</modelVersion>  
  5.     <groupId>com.huawei.inoc.wfm.task</groupId>  
  6.     <artifactId>task-sla</artifactId>  
  7.     <version>0.0.1-SNAPSHOT</version>  
  8.     <name>task-sla</name>  
  9.   
  10.     <!-- 配置部署的远程仓库 -->  
  11.     <distributionManagement>  
  12.         <snapshotRepository>  
  13.             <id>nexus-snapshots</id>  
  14.             <name>nexus distribution snapshot repository</name>  
  15.             <url>http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/</url>  
  16.         </snapshotRepository>  
  17.     </distributionManagement>  
  18.   
  19. </project>  

这里配置了<distributionManagement>元素,其中的<id>nexus-snapshots</id>,与前面说的settings.xml中的<servers>元素中的配置必须一致 

配置这个的目的,是当执行maven deploy时,才知道要将生成的构件部署到哪个远程仓库上,注意这里的URL填的就不是public group的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/groups/public/ 

而是snapshots的地址: 
http://10.78.68.122:9090/nexus-2.1.1/content/repositories/snapshots/ 

但是在nexus中,snapshots也是聚合到public group里的,所以开发人员A提交到snapshots的构件,开发人员B也可以从public group里获取到 

十、eclipse中的设置 

经过前面的配置,已经可以通过命令行进行maven操作了。不过实际开发中,一般都是使用eclipse的m2e插件,所以还需要对eclipse进行一些额外的配置 

在Preferences-->Maven-->User Settings中,点击Update Settings,加载刚才我们对settings.xml的更改 

 

然后在Maven Repositories视图里,可以看到仓库的情况 

 

可以看到,从超级pom继承来的central被置灰了,不可用,后面的mirrored by nexus表示对该仓库的所有请求,都会转到镜像nexus中 

十一、nexus的目录结构 

nexus会安装在%USER_HOME%/sonatype-work/nexus下,有以下目录 

 

其中的storage目录,就是构件实际存放的地址了 









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值