Maven 工程规范

SuperPom继承

所有工程需直接或间接继承 SuperPom

<parent>
	<artifactId>qunar-supom</artifactId>
	<groupId>qunar.common</groupId>
	<version>1.3.2</version>
</parent>
避免使用默认profile,不要出现以下代码
<activation>
	<activeByDefault>true</activeByDefault>
</activation>
WAR工程忽略deploy
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-deploy-plugin</artifactId>
	<configuration>
		<skip>true</skip>
	</configuration>
</plugin>
重复类检查

1. 增加超级pom指向

    <parent>
        <groupId>qunar.common</groupId>
        <artifactId>qunar-supom-generic</artifactId>
        <version>1.3.2</version>
    </parent>

2. 运行命令查看重复类

mvn enforcer:enforce

3. 常见重复类排除

  • junit :jmockit 冲突问题: 请将 junit 换成 junit-dep
  • commons-beanutils & commons-collections 冲突问题: 去掉commons-beanutils版本号
  • jcl-over-slf4j & commons-logging 冲突: 删掉 commons-logging
版本号管理

所有依赖的版本号应使用dependencyManagement 显示管理. dependency中不能包含版本号

<dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>com.qunar.rpc.demo</groupId>
			<artifactId>rpc-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
</dependencyManagement>
<dependencies>
	<dependency>
		<groupId>com.qunar.rpc.demo</groupId>
		<artifactId>rpc-api</artifactId>
	</dependency>
</dependency>
Scope定义

应明确定义除了compile之外的scope. 尤其是test. 作用域参考下表

scope 编译 测试 运行 举例
compile Y Y Y spring-core
test - Y - JUnit
provided Y Y - servlet-api
runtime - Y Y JDBC驱动
system Y Y - 本地JNI相关,禁止使用
解决包冲突问题,使用搜索引擎

http://mvnrepository.com/

Jar 禁止包含工程配置文件

默认的屏蔽的文件有:  *.xml, *.properties

Resource 继承与重载

1. 配置文件中各环境差异的放在profile中, 否则放在resource里.

2. 建议使用Spring的变量替换 , 禁用maven替换.

请慎用 combine.self="override"


 DupplicateClass 解决汇总

  Found in:
    org.slf4j:slf4j-log4j12:jar:1.6.1:compile
    org.slf4j:slf4j-jdk14:jar:1.6.1:compile
  Duplicate classes:
    org/slf4j/impl/StaticMarkerBinder.class
    org/slf4j/impl/StaticLoggerBinder.class
    org/slf4j/impl/StaticMDCBinder.class

解决方案 : 删掉 slf4j-jdk14:jar
原因: 这是分别两个slf4j的实现, 按标准选择 log4j实现.

  Found in:
    commons-beanutils:commons-beanutils:jar:1.8.2:compile
    commons-beanutils:commons-beanutils-core:jar:1.7.0:compile
  Duplicate classes:
    org/apache/commons/beanutils/locale/LocaleBeanUtilsBean.class
    org/apache/commons/beanutils/locale/converters/DoubleLocaleConverter.class
    org/apache/commons/beanutils/locale/converters/DecimalLocaleConverter.class
    org/apache/commons/beanutils/converters/ShortConverter.class

解决方案 : 删掉 commons-beanutils-core:jar, 并且采用beanutils的继承版本号.
原因: commons-beanutils-core:jar 是个有问题的包, 只删除了一部分外部依赖, 并没有彻底删掉外部包. 所以, 使用我们打过补丁的beanutils.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值