当前位置: 首页>编程语言>正文

基于maven项目构建多个springboot子模块 springboot maven多模块打包

2、实际使用maven进行编译打包

1)对common模块进行编译打包
pom中配置:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

执行clean-compile-install

2)对parent项目编译
实践中发现必须先将父项目进行编译后,其他模块才能正常编译打包
parent项目pom设置:

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

执行-clean-complile-package

3)对baseService模块进行编译打包
pom设置:

<dependencies>
        <!--依赖common模块-->
        <dependency>
            <groupId>com.tzwy.mcsp</groupId>
            <artifactId>common</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!--freemarker-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>


        <!--shiro-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>${shiro.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>${shiro.version}</version>
        </dependency>

        <!--验证码-->
        <dependency>
            <groupId>com.github.axet</groupId>
            <artifactId>kaptcha</artifactId>
            <version>${kaptcha.version}</version>
        </dependency>

    </dependencies>
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                <classifier>exec</classifier>
                </configuration>
            </plugin>
        </plugins>

        <resources>

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

执行:clean-complile-package

4)对esmService模块进行编译打包
pom设置:

?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>mcsp</artifactId>
        <groupId>com.tzwy.mcsp</groupId>
        <version>1.0.1</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>esmService</artifactId>

    <dependencies>
        <!--依赖baseService模块-->
        <dependency>
            <groupId>com.tzwy.mcsp</groupId>
            <artifactId>baseService</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <!--<configuration>-->
                <!--<classifier>exec</classifier>-->
                <!--</configuration>-->
            </plugin>
        </plugins>

        <resources>

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


</project>

执行:clean-complile-package

5)运行项目:

基于maven项目构建多个springboot子模块 springboot maven多模块打包,基于maven项目构建多个springboot子模块 springboot maven多模块打包_xml,第1张

右键点击debugRun,完成运行;

可以看到,build中配置了resources;

理解resources

构建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包中。

Maven项目的标准目录结构

  • src
  • main
  • java         源文件 
  • resources    资源文件
  • filters   资源过滤文件
  • config   配置文件
  • scripts   脚本文件
  • webapp   web应用文件
  • test
  • java    测试源文件
  • resources    测试资源文件
  • filters    测试资源过滤文件
  • it       集成测试
  • assembly    assembly descriptors
  • site    Site
  • target
  • generated-sources
  • classes
  • generated-test-sources
  • test-classes
  • xxx.jar
  • pom.xml
  • LICENSE.txt
  • NOTICE.txt
  • README.txt

资源文件的配置
资源文件是Java代码中要使用的文件。代码在执行的时候会到指定位置去查找这些文件。前面已经说了Maven默认的处理方式,但是有时候我们需要进行自定义的配置。

一般情况下,我们用到的资源文件(各种xml,properites,xsd文件等)都放在src/main/resources下面,利用maven打包时,maven能把这些资源文件打包到相应的jar或者war里。

有时候,比如mybatis的mapper.xml文件,我们习惯把它和Mapper.java放一起,都在src/main/java下面,这样利用maven打包时,就需要修改pom.xml文件,来把mapper.xml文件一起打包进jar或者war里了,否则,这些文件不会被打包的。(maven认为src/main/java只是java的源代码路径)。网络上有很多方法,我大概试了下,几种方法都可以,可以任选一种即可。

一是在<build>元素下添加<resources>进行配置。
另一种是在<build>的<plugins>子元素中配置maven-resources-plugin等处理资源文件的插件。

1)配置resouces节点

<build>
    .......
      <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
             </excludes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    ......
</build>

下面是另一个项目中具体案例,了解一下各个节点的意思:

<resource>
				<!-- 要打包的文件所在的目录 -->
				<directory>src/main/webapp/</directory>

				<!-- includes 和 excludes 都可以独立配置,也可以同时配置 -->

				<!-- 指定要打包的文件 -->
				<!-- <includes> <include>**/*.*</include> </includes> -->

				<!-- 或者也可以剔除不需要打包的文件 -->
				<excludes>
					<exclude>**/*.xml</exclude>
				</excludes>

				<!-- 指定打包到目的文件夹 -->
				<targetPath>META-INF/resources/</targetPath>
			</resource>

2)配置资源处理插件

<plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <executions>
                <execution>
                    <id>copy-xmls</id>
                    <phase>process-sources</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${basedir}/target/classes</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${basedir}/src/main/java</directory>
                                <includes>
                                    <include>**/*.xml</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

另一个插件也能完成相同的功能

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>add-resource</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>add-resource</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                                <directory>src/main/java</directory>
                                <includes>
                                    <include>**/*.xml</include>
                                </includes>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>

打包时文件相关的配置
打包时target/classes目录中的资源文件会和class字节码一起被打进jar包或war包中。有时候默认的情况不能完全满足需求,如target/classes目录中的一些文件不希望打入jar包中,就需要额外配置maven-jar-plugin插件。

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <excludes>
                        <exclude>*.properties</exclude>
                    </excludes>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>xxxxxx.ConsoleLauncher</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

记录坑:
1、项目启动后使用font-awesome.min.css时,图标无法正常显示;
原因:一开始在pom文件中maven插件配置成了

<filtering>true</filtering>

修改为false后成功显示图标;

Filtering功能:

Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(*.properties,*.xml)当中 ${…} 符号的值。比如你系统属性有一项 “user.name=foobar”,那么资源文件当中的 ${user.name} 符号会在 Maven 编译时自动被替换为 “foobar”。

举个例子:

默认的项目资源文件位于 “src/main/resources” 目录,在该目录下创建一个文件 “test.properties”,里面写上一行:

Hello ${user.name}

然后修改项目文件(pom.xml)启用 filtering 功能,如:

<project>
    ...
    <build>
      ...
        <resources>
          <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
          </resource>
          ...
        </resources>
        ...
    </build>
    ...
</project>

然后编译项目:

$mvn clean compile -Duser.name=foobar

查看输出文件 target/classes/test.properties 的内容,可见原先的 “Hello {user.name}” 已经变成 “Hello foobar”。

我们也可以把 filtering 用到的变量写在项目属性段里,比如:

<project>
  ...
  <properties>
    <user.name>foobar</user.name>
    <user.email>foobar@some.com</user.email>
  </properties>
  ...
</project>

如果属性项比较多的话,最佳实践是把他们抽离出来独立一个属性文件,比如在你项目目录(即 pom.xml 文件所在的目录)新建一个属性文件 project.properties:

user.name=foobar
user.email=foobar@some.com

然后在 build/filters/filter 里指明使用这个属性文件作为 filtering 属性值的来源:

<project>
  ...
  <build>
    ...
    <filters>
      <filter>project.properties</filter>
    </filters>
    ...
  </build>
  ...
</project>

参考资料:http://www.360doc.com/content/15/0123/10/20466010_443036304.shtml



https://www.xamrdz.com/lan/5j61923835.html

相关文章: