springboot多模塊項目(包含頁面)創建和打包發佈-4

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)運行項目:
在這裏插入圖片描述
右鍵點擊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>

參考資料:https://www.cnblogs.com/pixy/p/4798089.html

記錄坑:
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>[email protected]</user.email>

  </properties>

  ...

</project>

如果屬性項比較多的話,最佳實踐是把他們抽離出來獨立一個屬性文件,比如在你項目目錄(即 pom.xml 文件所在的目錄)新建一個屬性文件 project.properties

user.name=foobar

user.email=[email protected]

然後在 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章