前言
公司项目升级转换成maven项目。包括搭建私服,项目结构升级为maven。

搭建私服
搭建私服目的

主要原因是老项目好多jar包进行过改造编译,还有一些jar不确定版本,有一些第三方jar中央仓库不存在。

  1. 私服搭建过程
    http://blog.csdn.net/zwc0910/article/details/17349111
  2. 下载nexus
    http://nexus.sonatype.rog/downloads
  3. 解压安装、做成服务、设置开机启动
    略过
  4. 私服仓库详解
    4.1. 按类型划分
    nexus里可以配置3种类型的仓库,分别是proxy、hosted、group
    proxy是远程仓库:的代理(代表中央仓库)
    hosted宿主仓库:(公司自己的仓库,可以使deploy发布的也可以是第三方jar自己
    上传的jdbc.jar)
    group组:是仓库的组合,这个才是对用户暴露的地址。
    
    4.2. 按内容划分
    Snapshots仓库:是用来存放用户deploy的快照版本jar包,这部分的jar包的特点是每次做修
    改的时候不用修改gav直接发布会在私服上生成一个带日期的版本jar。依赖项目只需要更新
    maven项目就ok了。
    Releases仓库:这个仓库用来存放正式版发布项目。修改项目内容不修改gav会报错,
    发版失败。
    
    4.3. 总结
    对于还需要经常修改的deploy项目采用快照版能够有效减轻依赖项目忘记删除jar包
    更新的错误  
    
  5. nexus权限配置
    配置对于相应仓库的读写权利。付给相应的角色。然后给用户分配角色

    构建项目

  6. 代码拷贝:代码、配置文件、前台页面拷贝。(需要注意编码问题maven打包时会检测编码。这是一个大坑)
  7. 配置jar包:最重要的是配置jar顺序,优先配置一些关联jar(例如 struts-spring.jar) 这个jar会依赖struts2和spring的基础jar。由于jar的依赖是有传递性的这样能减少相应的jar冲突也能减少pom文件的复杂程度。 改造中遇到的坑,spring-security会依赖spring基础jar.发现选择的spring基础jar和security依赖的jar版本有差别,增加不少工作量,同样对于jar冲突的风险明显提高。发现不同版本jar时通常最外层jar覆盖内层jar。
  8. pom文件一些小问题解决:NO1 发现代码中部分代码例如编码加密等部分依赖jdk中rt.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<encoding>utf8</encoding>
<source>1.7</source>
<target>1.7</target>
<compilerArguments>
<verbose />
<bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath>
</compilerArguments>
</configuration>
</plugin>

发现服务器不认分号。只认冒号。只能在开发时和发版时临时修改

NO2 发现老项目中java代码竟然包含非java代码。
导致项目打包时自动忽略这部分代码。
解决方法,强制在打包时不忽略这部分文件

1
2
3
4
5
6
7
8
<resource>
<directory>src/main/java</directory>
<includes>
<include>plugins*/*</include>
<include>cn/com/sinosoft/captcha*/*</include>
</includes>
</resource>

NO3 采用profile形式分别配置发版配置文件遇到小问题。老项目分了好多properties
配置文件想统一配置文件导致有的文件读不到。解决方法。把所有的配置文件加上

1
2
3
4
5
6
7
8
9
<resource>
<directory>src/main/resources</directory>
<includes>
<include>jdbc.properties</include>
<include>SMSconfig.properties</include>
</includes>
<filtering>true</filtering>
</resource>

NO4强制配置文件编码

1
2
3
4
5
6
7
8
9
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>utf8</encoding>
</configuration>
</plugin>