springboot集成java+groovy+lombok混合编程使用maven多模块打包实例

springboot多模块打包实例

由于在项目中引入了groovy编程,并且使用了lombok,在运行时没发现什么问题,但是最后打包部署时出现一系列问题。查了许久资料终于解决,特将解决方案写成文档记录一下

项目结构

upms-integrate      父模块
├─upms-base         公共模块
│
├─upms-web          管理后台-web
│
├─upms-generator    代码生成器

upms-admin模块依赖upms-base模块

maven打包各模块配置

  • upms-integrate父模块
<groupId>com.zz</groupId>
<artifactId>upms-integrate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<modules>
    <module>upms-base</module>
    <module>upms-web</module>
    <module>upms-generator</module>
</modules>
<!-- 父模块标识,不参与打包 -->
<packaging>pom</packaging>
.
.
.
<!-- plugins;父模块不用引入spring-boot-maven-plugin 配置 -->
  • upms-base公共模块配置
<parent>
    <artifactId>upms-integrate</artifactId>
    <groupId>com.zz</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>upms-base</artifactId>
<!-- 标识为打成jar包 -->
<packaging>jar</packaging>
.
.
.
<resources>
    <!-- 此处可以将mapper包下的.xml文件打到jar包中 -->
    <resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
    </resource>
    <!-- 此处因为使用了resources节点,导致maven不能自动加载resources文件夹资源文件,
    所以需要手动配置才能打到jar包中,如果没有使用resources节点,那么此处不需要配置
     -->
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
            <include>**/*.xml</include>
            <include>**/*.tld</include>
            <include>**/*.cap</include>
            <include>**/*.txt</include>
        </includes>
        <excludes>
            <exclude>mybatis-generator/*.*</exclude>
        </excludes>
        <filtering>false</filtering>
    </resource>
</resources>

<!-- 注意,被别的模块引入的公共模块千万不要配置spring-boot-maven-plugin打包插件
     否则打包时引用模块会抛出“The import XXX cannot be resolved”的异常 -->
  • upms-web模块
<parent>
    <artifactId>upms-integrate</artifactId>
    <groupId>com.zz</groupId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>upms-web</artifactId>
<!-- 此处处决于你使用哪种方式部署项目,jar、war都可以 -->
<packaging>jar</packaging>
<name>upms-web</name>
.
.
.
<build>
    <finalName>upms</finalName>
    <resources>
        <resource>
            <!-- 解决字体下载失败的问题 -->
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <excludes>
                <exclude>static/**</exclude>
            </excludes>
            <includes>
                <include>**</include>
            </includes>
        </resource>
    </resources>

    <plugins>
        <plugin>
            <!-- 项目入口所在模块需要配置打包插件 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

各模块按以上配置后,即可使用mvn clean install/package 指令打包了。
也可以使用-pl upms-web指定打包模块,前提是要先把该模块依赖的所有子模块安装到本地或远程仓库

(重点)springboot在混合java+groovy编程并且使用lombok的情况下打包配置

java混合groovy打包需要使用groovy-eclipse-compiler插件,并且在引入了lombok的情况下又会有一些问题。
解决方法为:上述各模块配置不变,在父模块中增加以下配置

https://github.com/groovy/groovy-eclipse/wiki/Groovy-Eclipse-Maven-plugin

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <groovy.version>2.4.15</groovy.version>
    <lombok.version>1.16.18</lombok.version>
    <groovy.eclipse.compiler.version>2.9.2-01</groovy.eclipse.compiler.version>
    <groovy.eclipse.batch.version>2.4.3-01</groovy.eclipse.batch.version>
</properties>

<dependencies>
    <!-- 添加groovy支持,混合编程 -->
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <classifier>indy</classifier>
        <version>${groovy.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>    
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.0</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>UTF-8</encoding>
                <compilerId>groovy-eclipse-compiler</compilerId>
                <verbose>true</verbose>
                <!-- 不使用lombok的情况下可以去掉下面的配置 -->
                <compilerArguments>
                    <!-- consult Lombok docs to confirm agent class name for yourversion -->
                    <javaAgentClass>lombok.launch.Agent</javaAgentClass>
                </compilerArguments>
                <fork>true</fork>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy-eclipse-compiler</artifactId>
                    <version>${groovy.eclipse.compiler.version}</version>
                </dependency>
                <!-- for 2.8.0-01 and later you must have an explicit dependencyon groovy-eclipse-batch -->
                <dependency>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>groovy-eclipse-batch</artifactId>
                    <version>${groovy.eclipse.batch.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.codehaus.plexus</groupId>
                    <artifactId>plexus-compiler-api</artifactId>
                    <version>2.8.1</version>
                </dependency>
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>${lombok.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

以上问题得到解决

maven打包异常

  • 无法解析lombok的@Data的注解。Groovy:unable to resolve class Delegate , unable to find class for annotation
    需要使用groovy-eclipse-compiler插件打包
  • The import XXX cannot be resolved
    被依赖的子模块使用了spring-boot-maven-plugin打包插件,导致引用模块无法发现公用模块的包文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值