1. 程式人生 > >maven resources導致打包失敗分析與解決

maven resources導致打包失敗分析與解決

今天在工作時遇到一個測試環境maven打包失敗的問題。一開始的時候jenkins只顯示了打包失敗,沒有其他的資訊展示出來,在將專案拉取到本地之後,專案又可以完好地啟動,於是判斷可能是maven打包時出錯,於是終端進入對應目錄之後,輸入以下命令:

mvn package -U -Denv=pre -DskipTests

果然,build failed。

現場失敗資訊如下:

官網對它的介紹是:

The Resources Plugin handles the copying of project resources to the output directory. There are two different kinds of resources: main resources and test resources. The difference is that the main resources are the resources associated to the main source code while the test resources are associated to the test source code.

查看了官方的介紹之後,我對它的總結如下:

我們可以使用maven-resource-plugin在構建專案時對pom檔案進行動態的變數替換,比如:

<project>
    ...
    <properties>
        <your.name>world</your.name>
    </properties>
    ...
</project>

可以結合filter來讀取資原始檔中的變數設定,以此來進行變數的動態替換。

...
<filters>
  <filter>my-filter-values.properties</filter>
</filters>
...

properties檔案中可以這麼存:

your.name=hello

然後maven在進行打包的過程中會將filter中的檔案內容和所有resource中的內容進行全部替換。這樣的話我們可以在專案中定義一些特定的值,並且在打包過程中進行動態替換。需要替換的資源是這麼指定的:

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

官方在這裡對其進行了說明:

Warning: Do not filter files with binary content like images! This will most likely result in corrupt output.

If you have both text files and binary files as resources it is recommended to have two separated folders. One folder src/main/resources (default) for the resources which are not filtered and another folder src/main/resources-filtered for the resources which are filtered.

也就是說指定資源範圍內如果存在二進位制檔案和圖片的話可能會有檔案在進行過濾替換的過程中被損壞。

看到這裡,我翻看了一下專案提交日誌,發現有同事在最近的提交中新增了ttf檔案,並且正好在我們的專案過濾替換範圍之內。

看來問題可能出現在這了。按照官方文件的指示,繼續檢視相關說明。
官方給的方案如下:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.0.2</version>
        <configuration>
          ...
          <nonFilteredFileExtensions>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>swf</nonFilteredFileExtension>
          </nonFilteredFileExtensions>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>

看完語法之後發現,其實設定過濾和上面的include域exclude用法類似。官方說明如下:

When specifying a resource directory, every file within that directory may not be used. Thus, we may have to specify only the files that we want to include or specify the files that we want to exclude.

To include a resource, we only need to add an element.

And to exclude a resource, we only need to add an element.

For example, we can have both and elements. For example, if we want to include all text files that does not contain the word “test” in their filename.

<project>
  ...
  <name>My Resources Plugin Practice Project</name>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/my-resources</directory>
        <includes>
          <include>**/*.txt</include>
        </includes>
        <excludes>
          <exclude>**/*test*.*</exclude>
        </excludes>
      </resource>
      ...
    </resources>
    ...
  </build>
  ...
</project>

看來解決辦法就在這兒了。

原有的資原始檔設定如上所示,經過修改之後,變更如下:

再次打包試一下:

完美。分享一下,挖坑填坑是個技術活。

相關推薦

maven resources導致打包失敗分析解決

今天在工作時遇到一個測試環境maven打包失敗的問題。一開始的時候jenkins只顯示了打包失敗,沒有其他的資訊展示出來,在將專案拉取到本地之後,專案又可以完好地啟動,於是判斷可能是maven打包時出錯,於是終端進入對應目錄之後,輸入以下命令: mvn pac

客戶端網路切換導致應用退回登陸前介面 的故障分析解決方案

故障現象: 使用者使用手機銀行客戶端登入,客戶端處於登入狀態,由WiFi網路切換為手機4G網路,導致手機銀行直接退回到登入前狀態,伺服器日誌顯示該使用者在登入期間出現兩個不同地點的IP。 故障分析: 網路架構如圖所示,當省內某使用者使用聯通WiFi登入手機銀行後,F5將請求轉發到

NUMA導致的MySQL伺服器SWAP問題分析解決方案

【SWAP產生原理】 先從swap產生的原理來分析,由於linux記憶體管理比較複雜,下面以問答的方式列了一些重要的點,方便大家理解:  1、swap是如何產生的 swap指的是一個交換分割槽或檔案,主要是在記憶體使用存在壓力時,觸發記憶體回收,這時可能會將部分記憶體的資料交換到swap空間。  2、

Jenkins入門教程之自動構建部署專案常見錯誤及解決方案(十)jenkins中構建maven專案一直打包失敗

此篇文章總結六筆者在使用jenkins過程中的一些坑和常見錯誤總結和解決方案,在這裡分享給大家,希望大家少走彎路。常見錯誤:1、在 Jenkins 中,使用 maven 打包報 package xxx does not exist 問題的解決方法錯誤資訊:解決方案:需要把ma

SpringCloud-Maven打包--問題疑惑解決

1.專案在webapp下的web-inf下引入了依賴包,run as?maven install報錯: 找不到符號 右鍵專案->MAVEN->Update Project Configuration 然後clean相關專案 再打包 依賴包就

jar包中File 文件找不到的異常分析解決

http ont blog except .... 我們 too 格式 結果 源鏈接: http://hxraid.iteye.com/blog/483115#comments 我們常常在代碼中讀取一些資源文件(比如圖片,音樂,文本等等)。在單獨運行的時候這些簡單的處理

啟動VIP報CRS-1028/CRS-0223致使VIP狀態為UNKNOWN故障分析解決

ssi host article 3.6 handle 性能優化 roc ng- 應用程序 CRS版本號為10.2.0.4 1、VIP State為UNKNOWN [[email protected]/* */ ~]# crs_stat -t

Java內部類持有外部類的引用詳細分析解決方案

調用 lai urn star keyword inner android get sta 在Java中內部類的定義與使用一般為成員內部類與匿名內部類,他們的對象都會隱式持有外部類對象的引用,影響外部類對象的回收。 GC只會回收沒有被引用或者根集不可到達的對象(取決於GC算

分布式系統互斥性冪等性問題的分析解決

解決沖突 ldr 隊列 reads failure 是的 最大 循環鏈表 成員變量 前言 隨著互聯網信息技術的飛速發展,數據量不斷增大,業務邏輯也日趨復雜,對系統的高並發訪問、海量數據處理的場景也越來越多。如何用較低成本實現系統的高可用、易伸縮、可擴展等目標就顯得越發重要。

CAN總線錯誤分析解決

[1] specified ace over 成功 keyword 回收 狀態轉換 article 背景 寫這篇文章是因為我看到網上介紹CAN總線錯誤處理的文章,清一色的都是生搬照抄教科書或是數據文檔的內容,特別是國內很難找到一些有價值的內容,這讓一些真正有需要的人

JS浮點計算精度問題分析解決

href 動態控制 hub 截斷 max fix math floating 方案 問題描述 在JS計算四則運算時會遇到精度丟失的問題,會引起諸多問題,看看以下例子: 例如:在chrome控制臺輸入 0.1 + 0.7 輸出結果是 0.7999999999999999 例如

Android開發之漫漫長途 番外篇——內存泄漏分析解決

set 程序 靜態 內存 ins clas back undle 介紹 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷Ⅰ,Ⅱ,

(轉)postfix瘋狂外發垃圾郵件之分析解決

nbsp 被人 4.4.2 def mst conn 其中 post system 從進程中看到,好像是postfix有問題。我這postfix主要是用來給程序發達郵件用的,如報警,程序外發郵件等。平時postfix進程不會像現在這樣異常,這在postf主進程CPU占用高,

maven報Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.6的解決方案

man 一個 art enc resources osi pre read 是我 上面截圖是我在新建maven項目的時候報錯信息提示,我是這麽解決的 1.在pom.xml文件中加入maven-resources-plugin配置 <dependency>

服務器響應慢的分析解決

直觀 lan sql數據庫 cat 方法 閾值 ack time www 一、排除自身網絡問題 可以使用站長工具測試網站速度:站長之家 image.png 二、檢查是否和瀏覽器有關 換一個瀏覽器訪問網站,進行同樣的操作,看是否存在差異。之前有遇到一個問題

Java 記憶體溢位(java.lang.OutOfMemoryError: Java heap space)分析解決

說明:下面出現的問題為本人在myeclips開發過程中,開發工具時獲取海量資料時出現的問題報錯。由於本人開發電腦使用的4g記憶體,虛擬記憶體與myeclips相關記憶體設定無法滿足要求。 問題分析:(網上資料整合與翻譯) java.lang.OutOfMemo

AIX 中 Paging Space 使用率過高的分析解決

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle 編譯儲存過程報錯: 表或檢視不存在問題分析解決

今天遇到一個問題,自己寫了一個很簡單的儲存過程,編譯的時候,報錯: 表或檢視不存在;      但是:表確實是存在,單獨拿出來查詢,一點問題也沒有。      經過幾番查詢,找到了問題所在: 查詢表的許可權不夠; 解決方案:

一次Redis任務佇列積壓的問題分析解決

目前的流程:   兩個Redis: Redis1: 儲存詞條的summary資訊 Redis2:任務佇列,用於暫存Redis中沒有summary,需要進行處理獲取summary, 佇列用的Redis的list結構   兩個程序: 1、 程序1:服務

IIS 部署專案時提示:“錯誤訊息401.2 :未經授權:伺服器配置導致登陸失敗。” 的解決辦法?

IIS 部署專案時提示:“錯誤訊息401.2 :未經授權:伺服器配置導致登陸失敗。” 的解決辦法? 這個錯誤的定位:你的站點使用了Forms驗證,而且在部署在生產環境的時候,設定錯誤,或者註釋了。 解決辦法: 1、檢查Forms配置是否遮蔽。 2、有許可權訪問的資源是否已經開發。