项目开发环境搭建手记(4.Maven私服Nexus安装及自动部署到Tomcat)

作者:fbysss
QQ:溜酒酒吧酒吧吾散

blog:blog.csdn.net/fbysss

声明:本文由fbysss原创,转载请注明出处

一、.maven安装

下载maven:http://maven.apache.org/download.cgi

tar zxvf apache-maven-3.2.5-bin.tar.gz

mv apache-maven-3.2.5 /usr/local/

vi /etc/profile

文件末尾添加

export MAVEN_HOME=/usr/local/apache-maven-3.2.5
export PATH=$PATH:$MAVEN_HOME/bin

 

source /etc/profile

mvn就可以看到输出了。

回想Ant,对包是没有这样的管理的,全凭程序员自己把jar包放在一起,可能会出现:

1.版本冲突。因为包与包之间是相互引用的,到底哪个和哪个匹配需要弄准确了。比如spring-orm的3.2.3版本,引用了一个aopalliance1.0版本的包。

2.包遗漏或冗余。因为这些jar包都是散列的一个个文件存在与某个文件夹里面,没有一个归档说明,文件夹有任何变化,都没有记录和说明。

另外Maven的一个很大的好处,就是程序的发型包不需要附带一大堆能够在互联网上找到的jar包,而是可以直接通过pom文件从maven中央仓库中下载。这样就能使应用便携化。

  

二、maven私服Nexus安装

背景:安装Nexus私服,是为了避免maven总从远程中央仓库下载太慢(海外线路),可以在公司内部搭建一个私服,根据需要,再从中央仓库同步一些内容过来。

步骤:

下载nexus-2.11.1-01-bundle.tar.gz,然后运行bin下的nexus start  

Starting Nexus OSS...

Failed to start Nexus OSS.

原因是sonatype-work文件夹归属不对。

这里面有一个readme也已经说明了,运行的时候也提示了,不建议用root运行

所以,解压的时候,就不应该用root解压。用普通用户解压,

mkdir nexus-2.11.1-01-bundle

tar zxvf xxxxxx.gz -C nexus-2.11.1-01-bundle

要注意的是,8081后面还有一个后缀

访问地址如下:http://localhost:8081/nexus/

 

 问题:

nexus central仓库右键,repaire index的时候,发现后台日志/sss/nexus-2.11.1-01-bundle/logs/wrapper.log中报错:

 

er - Trying to get remote index for repository"Central" [id=central]
jvm 2    | 2015-01-22 15:20:43,441+0800 INFO [pxpool-1-thread-2] admin org.sonatype.nexus.index.DefaultIndexerManager -Cannot incrementally update index for repository central
jvm 2    | 2015-01-22 15:20:43,442+0800 INFO [pxpool-1-thread-2] admin org.sonatype.nexus.index.DefaultIndexerManager -Unable to incrementally update index for repository central. Trying full indexupdate
jvm 2    | 2015-01-22 15:20:43,846+0800 INFO [pxpool-1-thread-2] admin org.sonatype.nexus.index.DefaultIndexerManager -Trying to get remote index for repository "Central" [id=central]

 

后来居然出现

jvm 2    | 2015-01-22 15:38:22,893+0800WARN  [pxpool-1-thread-2] adminorg.sonatype.nexus.index.DefaultIndexerManager - Cannot fetch remote index forrepository "Central" [id=central] due to IO problem.
jvm 2    | java.net.SocketTimeoutException: Read timed out

 

实际上是因为虚拟机没有vpn,网速很慢。

解决:用代理软件ccproxy在主机进行代理。

然后在nexus的administration中可以进行设置,设置http和https的代理

 

三、配置Maven自动部署到Tomcat

tomcat有一个maven插件,可以直接控制部署到tomcat:

http://tomcat.apache.org/maven-plugin-trunk/index.html

  首先,在Parent Pom里面的plugins节点,增加一段:

                 <plugin>

                 <groupId>org.apache.tomcat.maven</groupId>
                 <artifactId>tomcat7-maven-plugin</artifactId>
                 <version>2.2</version>
                </plugin>

 

增加configuration:

                <plugin>

                 <groupId>org.apache.tomcat.maven</groupId>
                 <artifactId>tomcat7-maven-plugin</artifactId>
                 <version>2.2</version>
                  <configuration>
                        <url>http://localhost:8080/manager/html</url>
                       <server>tomcat</server>
                  </configuration>

                </plugin>

 然后在$MAVEN_HOME/conf/settings.xml中,增加一个server

 <server>  

       <id>tomcat</id>  
      <username>admin</username> 
      <password>admin</password> 
</server>

  

mvn help:describe -Dplugin=tomcat7 可以查看相关操作

 mvn tomcat7:deploy

ERROR] No plugin found for prefix 'tomcat7'in the current project and in the plugin groups

 

查了一下,tomcat的插件已经在私服和本地库都有了,感觉没啥错误,所以估计是插件刚刚下载下来。

那么,再执行一遍,出现新的错误了:

[ERROR] Failed to execute goalorg.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) onproject sssApp: Cannot invoke Tomcat manager: Connection reset -> [Help 1]

需要进行相应配置

 

 当然,

 

vi $CATALINA_HOME/conf/tomcat-users.xml

 

增加:

 

<rolerolename="manager-gui"/>
<user username="admin" password="admin"roles="manager-gui"/>
</tomcat-users>

 

 ——注意:新版tomcat在权限控制方面有改动,根据版本不同而定。

 

结果还是出现上次的信息。

 后来发现,curl http://localhost:8080根本不行,而curl http://192.168.0.12:8080就可以。更换了地址,可以了。(见后面的解决办法)

 但是出现

[ERROR] Failed to execute goalorg.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) onproject sssApp: Tomcat return http status error: 413, Reason Phrase: RequestEntity Too Large:

 解决:

   server {
        listen 80;
        server_name appserver.fbysss.com;
        location /{
           index index.html index.htmindex.jsp;
           proxy_set_headerX-Forwarded-For $remote_addr;
           proxy_pass http://192.168.0.12:8080;
          client_max_body_size 500M;
        }
    }

 

nginx -s reload

 

然而,现在报错:

 

[ERROR] Failed to execute goalorg.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy (default-cli) onproject s: Cannot invoke Tomcat manager: Premature end of Content-Lengthdelimited message body (expected: 961; received: 0 -> [Help 1]

 

这个信息,整个世界都很少。怎么办》?

 mvn tomcat7:redeploy -X >deploy.log

 tail -1000 deploy.log

 

发现真正的问题在这里:好恶心啊

[ERROR] Tomcat return http status error:401, Reason Phrase: Unauthorized

....

[ERROR] Failed to execute goalorg.apache.tomcat.maven:tomcat7-maven-plugin:2.2:redeploy (default-cli) onproject sssApp: Tomcat return http status error: 401, Reason Phrase:Unauthorized:

  修改了

 vi $CATALINA_HOME/conf/tomcat-users.xml

 增加:

 <rolerolename="manager-gui"/>

<role rolename="manager-script"/>

 

<user username="admin"password="admin" roles="manager-gui,manager-script"/>
</tomcat-users>

 

并且修改

                  <configuration>
                       <url>http://appserver.fbysss.com/manager/text</url>
                       <server>tomcat</server>
                  </configuration>

 

结果又

 

 Premature end of Content-Length delimitedmessage body

 

还是,看-X的信息发现:

 

[DEBUG] Authentication required
[DEBUG] appserver.fbysss.com:80 requested authentication
[DEBUG] Authorization challenge processed
[DEBUG] Authentication failed
[DEBUG] Clearing cached auth scheme for http://appserver.fbysss.com:80
[DEBUG] Connection 0.0.0.0:55653<->127.0.0.1:80 shut down
[DEBUG] Connection 0.0.0.0:55653<->127.0.0.1:80 closed
[DEBUG] Connection released: [id: 0][route: {}->http://appserver.fbysss.com][totalkept alive: 0; route allocated: 0 of 2; total allocated: 0 of 5]

 

修改地址为ip地址+8080

 

redeploy还是记住的上次的地址,不行。

 

deploy

 

[WARNING] Unrecognised tag: 'server' (position: START_TAGseen ...</servers>\n <server>... @39:11)  @/usr/local/apache-maven-3.2.5/conf/settings.xml, line 39, column 11

  

一检查maven的settings.xml: o my god!

  

  </servers>
  <server>
        <id>tomcat</id>
       <username>admin</username>
       <password>admin</password>
  </server>

 

但reploy-only,还是记住的域名。

 

思考一下:这个设置在pom中,有一个旧的已经部署到local repository了。

 

于是直接修改repository中的pom文件。

 

 vi~/.m2/repository/com/fbysss/sssApp-pom/1.0.0/sssApp-pom-1.0.0.pom

 

                 <configuration>
                        <url>http://192.168.0.12:8080/manager/text</url>
                       <server>tomcat</server>
                  </configuration>

 

 

改成地址,这回就可以了。

 

[INFO] Packaging webapp
[INFO] Assembling webapp [sssApp] in /repo/sssApp/target/sssApp]
[INFO] Processing war project
[INFO] Copying webapp resources [/repo/sssApp/src/main/webapp]
[INFO] Webapp assembled in [4636 msecs]
[INFO] Building war: /repo/sssApp/target/sssApp.war

 

可以看到其原理:就是把tar下的包拷贝到tomcat下面。

参考文章:http://www.disasterarea.co.uk/blog/deploying-to-tomcat-7-with-maven/

  

四、问题分析解决:

那么,还有两个问题值得考究:

curl: (52) Empty reply from server

 

1.为什么域名就不行?——是因为在普通用户下,用sudo curl就可以了。

 

2.为什么localhostcurl都不行?——原来也是需要sudo,但是用curl http://127.0.0.1:8080就是可以。

 

因此,遇到curl: (52) Empty reply from server排查和办法如下:


1.用浏览器访问,看是否可以
2.尝试用curl http://本机ip地址,是否可以
3.尝试用curl http://127.0.0.1,是否可以

解决:如果上述方法可以,应该是权限问题。sudo,或者用root登录运行就可以了。

 

五、Maven小技巧:

mvn -f xxx.xml可以指定pom文件进行构建。

mvn -s /path/to/user/my-settings.xml 指定settings文件

mvn dependency:purge-local-repository 删除本地仓库

分析jar包依赖关系

mvn dependency:analyze

mvn dependency:tree

mvn install -U

 删除未下载完毕的本地仓库文件,再次更新下载

 mvn tomcat7:redeploy    重新部署Tomcat7

mvn -X  这个参数,用在疑难杂症上,当提示信息很怪异,想进一步排查时使用

 mvn help:describe -Dplugin=【plugname,比如tomcat7】 可以查看插件的相关操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值