参考

依赖管理

通过调整依赖中 scope 的范围和 optional 可以避免开发、测试及运行环境中不同组件包的冲突,循环依赖问题。

常见插件

  • maven-deploy-plugin:发布组件/工程到远程仓库,需要在 distriutionManagement 中配置仓库信息,并在 maven.settings.xml 中配置仓库所在服务器的账户信息;或者以文件部署方式只指定文件路径。

  • maven-compiler-plugin: 在编译阶段指定待编译资源的 Javac 版本或运行环境的 Java 版本。通过指定 Java 版本,此插件可以解决编译环境或持续集成环境 Java 版本高于实际部署环境版本的问题

  • maven-jar-plugin:将已编译的类文件和资源文件打包为 Jar,带签名的可以使用 Maven Jarsigner Plugin

  • maven-surefire-plugin:执行指定的测试代码,可以将结合 TsetNG,JUnit 以及自定义的测试代码。

  • maven-source-plugin:源码打包到 Jar,使用 jar-no-fork 时,和打 jar 包生命周期中后续的相关操作不会再次执行。

  • jetty-maven-plugin:开发过程中提供 jetty 容器作为应用运行环境。

  • maven-javadoc-plugin:使用 javadoc 工具为项目生成 javadoc

  • maven-gpg-plugin:使用 GnuPG(GNU Privacy Guard、GPG 开源加密软件) 对项目所以 artifact 进行签名。或者签名后再发布到远程仓库

  • maven-enforcer-plugin:约束条件检查,用户可自定义约束条件

针对自定义Jar包的处理

建议伴随工程,设置仓库(仅包含自定Jar),每次更新都使用此仓库,不会受其他影响,也不会影响构建过程。
主要思路:将隶属与本工程的仓库目录设置在 parent 工程下,然后使用 maven install 命令上传到本地仓库,然后将相关文件复制到parent工程下的仓库文件中。

  • 上传到本地仓库

    1
    2
    3
    4
    5
    6
    mvn install:install-file \ 
    -DgroupId=com.customized \
    -DartifactId=customized \
    -Dversion=1.1.1 \
    -Dpackaging=jar \
    -Dfile=/jar-place/customized-1.1.1.jar
  • 组织结构如下:

    1
    2
    3
    4
    5
    6
    7
    xxx-parent
    |-----xxx-conf
    |-----xxx-app
    |-----xxx-web
    |-----xxx-common
    |-----local_repo
    |-----com
  • pom 文件中配置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <repositories>
    <repository>
    <id>local_repo</id>
    <name>local_repos</name>
    <url>file://${project.basedir}/local_repo</url>
    <layout>default</layout>
    <releases>
    <enable>true</enable>
    <updatePolicy>always</updatePolicy>
    <checksumPolicy>ignore</checksumPolicy>
    </releases>
    <snapshots>
    <enabled>false</enabled>
    </snapshots>
    </repository>
    </repositories>

不同的切换环境

  • profiles 定义了各个环境的变量

    构建时使用命令行: mvm build clean package -P dev 或者使用 eclipse run configure 配置:Goals: clean package, Profiles: dev

    注意:properties 中 module-config-home 与 common-config-home 的不同

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <profiles>
    <profile>
    <id>dev</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <maven.app-name>${app-name}</maven.app-name>
    <maven.common-config-home>${project.build.directory}/../../../spring-seed-conf/dev</maven.common-config-home>
    <maven.module-config-home>${project.build.directory}/../../spring-seed-conf/dev</maven.module-config-home>
    <maven.log-home>${project.build.directory}/../../../../seed-log</maven.log-home>
    <maven.log-level>DEBUG</maven.log-level>
    <maven.log-queue-size>256</maven.log-queue-size>
    </properties>
    </profile>
    <profile>
    <id>release</id>
    <properties>
    <maven.app-name>${app-name}</maven.app-name>
    <maven.common-config-home>d:/spring-seed-conf/release</maven.common-config-home>
    <maven.log-home>d:/spring-seed-log/seed-log</maven.log-home>
    <maven.log-level>DEBUG</maven.log-level>
    <maven.log-queue-size>256</maven.log-queue-size>
    </properties>
    </profile>
    </profiles>
  • build 部分对配置文件的运行环境变量进行替换

    resouces 指明了存在待替换变量的文件所在的目录,此处待替换的变量即 profiles 中定义的环境相关变量。或者使用 filter 指定 src/main/resources 中特定文件,将文件用到的环境变量在打包时根据配置替换成固定值

    1
    2
    3
    4
    5
    6
    <resources>
    <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
    </resource>
    </resources>