Maven

Maven多模块中关于final static常量的一个坑

【背景】

多个独立的web项目合并到同一个Maven多模块项目中,目的是抽取公共模块,减少维护成本。
各个web项目的客户编码有不同的前缀,所以中各个web项目中都定义了一个常量,但是各个站点的值是不同的,中合并到一个Maven多模块项目后,抽取公共部分时由于中公共部分代码中需要用到这个常量,所以就随便将其中一个项目的该常量拿到了公共模块中,而各个站点的该常量保留,可是项目真正启动后,当使用该常量时发现其值一直是公共模块定义的,导致各个站点的客户编码使用了同样的前缀,从而出现了问题。

【结论】

如果公共模块中一个常量是各个站点都需要使用的,但是中各个单点的值又不一致,那么千万不要将该常量定义成final的。

【解决方法】

  • 去除final定义即可
  • 将该常量定义到各个项目的配置文件中

【举例】

使用Maven模板创建项目

列出Maven模板列表(1000+),并选择模板创建项目

mvn archetype:generate

导出Maven模板列表到txt

mvn archetype:generate > templates.txt

导入Eclipse

mvn eclipse:eclipse

根据常用模板创建项目

maven-archetype-quickstart (Java Project)

1
$ mvn archetype:generate -DgroupId=com.yiibai.core -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

maven-archetype-webapp (Java Web Project)

1
$ mvn archetype:generate -DgroupId=com.yiibai.web -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false