<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          草率了,又一個Maven打包的問題

          共 1870字,需瀏覽 4分鐘

           ·

          2020-10-14 20:45

          經(jīng)常遇到 Maven 相關(guān)的問題,這是之前的文章:

          • 這個 Maven 依賴的問題,你敢說你沒遇到過:https://mp.weixin.qq.com/s/SzBbDtyRUrk_7LH8SUbGXQ
          • Maven 快照版本要這樣用才真的香?。?a style="font-weight: bold;color: rgb(239, 112, 96);border-bottom: 1px solid rgb(239, 112, 96);" data-linktype="2">https://mp.weixin.qq.com/s/S0X1qY4uRsAeaqiC80fyNA

          今天再來一個,首先看下錯誤信息,一看就很熟悉,都是老朋友了,還是曾經(jīng)那個味道。

          Caused by: java.lang.ClassNotFoundException: net.sf.json.JSONException
          ? at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
          ? at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
          ? at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
          ? at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
          ? ... 57 more

          依賴的是 aliyun-log,aliyun-log 內(nèi)部依賴了 json-lib,如下:


          net.sf.json-lib
          json-lib
          2.4
          jdk15

          從依賴上看沒啥問題,然后看服務(wù)器上打包后的 lib 目錄中有沒有 json-lib 這個 jar 包??戳讼麓_實有 json-lib-2.4.jar。錯誤明確的告訴我們 JSONException 找不到,也就是沒有加載到 json-lib 的包,這個時候需要看下 MANIFEST.MF 文件中 Class-Path 有沒有設(shè)置 json-lib 的路徑。

          看了下,有對應(yīng)的路徑,值為 json-lib-2.4-jdk15.jar,可以看到,這個名稱跟打包出來后的不一致,多了 jdk15。

          這個時候再回過頭來看上面的 classifier,里面指定了 jdk15。classifier 通常用于區(qū)分不同 jdk 版本所生成的 jar 包,如果指定了 classifier,那么 jar 就是要加上 classifier 的值才行,也就是 json-lib-2.4-jdk15.jar 是正確的。

          現(xiàn)在問題很明顯,就是打包時的問題,打包后的 jar 名稱應(yīng)該是 json-lib-2.4-jdk15.jar 才對,而現(xiàn)在是 json-lib-2.4.jar,才導(dǎo)致了 ClassNotFoundException。

          然后看了下項目的打包方式,還是比較古老的 assembly,里面對打包的 jar 進(jìn)行了名稱的修飾。

          ${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension}

          格式已經(jīng)固定死了,classifier 不在格式當(dāng)中,所以打包后的 jar 名稱就會被改掉。解決方式需要將 classifier 也定義在 outputFileNameMapping 中。

          但是 classifier 這個不是每個 jar 都有的,如果直接使用 artifact.classifier 是不行的,沒有 classifier 的就會出問題,這里需要有個判斷。然后找了一個有就拼接,沒有就不使用的${dashClassifier?},完美解決。

          ${artifact.artifactId}-${artifact.baseVersion}${dashClassifier?}.${artifact.extension}

          文檔參考:

          http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html

          關(guān)于作者:尹吉歡,簡單的技術(shù)愛好者,《Spring Cloud 微服務(wù)-全棧技術(shù)與案例解析》, 《Spring Cloud 微服務(wù) 入門 實戰(zhàn)與進(jìn)階》作者, 公眾號猿天地發(fā)起人。

          瀏覽 81
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  男女无遮无挡一区二区爱豆视频 | 久操大香蕉在线视频 | 日本黄视频网 | 99精品视频16在线免费观看 | 婷婷播激情 |