zoukankan      html  css  js  c++  java
  • idea构建maven多module项目

    前言

    搭建一个项目,看似简单,但是总会遇到一些奇奇怪怪的问题。

    新建parent项目

    新建一个springboot项目或者maven项目都可以,这个无所谓。

    设置项目的maven仓库和编码。

    建module

    在parent项目下新建多个module,新建springboot项目或者maven项目都可以。

    maven项目自己新建包的时候尽量按照groupId + artifactId的方式,如果artifactId是多个中划线连接,则去掉中划线,全小写拼接。

    打包

    新建完成上述项目之后,在parent下打包试一下,报错 “unable to find main class”。

    介绍一下maven的packaging标签:

    <packaging>pom</packaging>   --------->   父类型都为pom类型
    <packaging>jar</packaging>   --------->   内部调用或者是作服务使用
    <packaging>war</packaging>   --------->   需要部署的项目
    

    把packaging 改为pom,大致就是告诉maven,咱只是个外包装,你不用找什么 main 方法了。

    之后继续打包,发现没有一个module生成target目录

    介绍一下maven的modules标签:

    <modules>
        <module>moduleA</module>
        <module>moduleB</module>
        <module>moduleC</module>
    </modules>
    

    在parent项目的pom中加入modules标签,包含一下子模块,告诉maven,这都是我小弟。

    子模块读取父模块或其他子模块的resource文件

    首先说一下maven编译的时候处理相关文件的过程:

    构建Maven项目的时候,如果没有进行特殊的配置,Maven会按照标准的目录结构查找和处理各种类型文件。

    • src/main/java和src/test/java :
      这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。

    • src/main/resouces和src/test/resources
      这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。

    • target/classes
      打包插件默认会把这个目录中的所有内容打入到jar包或者war包中。

    此部分参考:https://www.cnblogs.com/pixy/p/4798089.html

    了解了maven处理文件的过程,我们说一下maven的resources标签

    resources标签通常包含在build标签中;

        <build>
            <resources>
                <resource>
                    <directory>../src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                    </includes>
                </resource>
            </resources>
        </build>
    

    我们只需要配置resource的directory即可将其他模块的resource文件包含到本模块中。

    maven profile和spring profile整合

    其实就是想在application.properties文件中读取到pom中定义的变量

    先说maven profile,引入maven profile主要是为了做环境的分离:

        <profiles>
            <profile>
                <id>dev</id>
                <properties>
                    <!--主要这个标签名是自定义的-->
                    <activeProfile>dev</activeProfile>
                </properties>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
            </profile>
            <profile>
                <id>prod</id>
                <properties>
                    <activeProfile>prod</activeProfile>
                </properties>
            </profile>
        </profiles>
    

    在application.properties中指定spring.profiles.active=@activeProfile@

    maven编译的时候指定-P参数:mvn clean package -Pdev

    理想情况下,application.properties中会变成spring.profiles.active=dev

    但是,理想是丰满的,现实是骨感的,并没有成功,查了很多资料,很多人失败都是倒在了分隔符@@上,但是我并不是。。。

    后来发现注释掉resources标签打包就可以替换,使用resources标签就不行,定位到肯定是这儿出的问题。

    介绍一下resource标签下的filtering标签:
    filtering代表开启过滤,用指定的参数替换directory下的文件中的参数。。。

    然后在resource标签中加入filtering标签,设置为true就可以了

        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                        <include>**/*.properties</include>
                    </includes>
                </resource>
            </resources>
        </build>
    

    就这,啥也不是。。。

  • 相关阅读:
    Hibernate save, saveOrUpdate, persist, merge, update 区别
    Eclipse下maven使用嵌入式(Embedded)Neo4j创建Hello World项目
    Neo4j批量插入(Batch Insertion)
    嵌入式(Embedded)Neo4j数据库访问方法
    Neo4j 查询已经创建的索引与约束
    Neo4j 两种索引Legacy Index与Schema Index区别
    spring data jpa hibernate jpa 三者之间的关系
    maven web project打包为war包,目录结构的变化
    创建一个maven web project
    Linux下部署solrCloud
  • 原文地址:https://www.cnblogs.com/lwmp/p/13737259.html
Copyright © 2011-2022 走看看