<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>

          草率了,又一個(gè)Maven打包的問(wèn)題

          共 2035字,需瀏覽 5分鐘

           ·

          2020-10-12 22:05

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

          • 這個(gè) Maven 依賴的問(wèn)題,你敢說(shuō)你沒(méi)遇到過(guò):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

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

          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

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

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

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

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

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

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

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

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

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

          文檔參考:

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

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

          我整理了一份很全的學(xué)習(xí)資料,感興趣的可以微信搜索「猿天地」,回復(fù)關(guān)鍵字 「學(xué)習(xí)資料」獲取我整理好了的 Spring Cloud,Spring Cloud Alibaba,Sharding-JDBC 分庫(kù)分表,任務(wù)調(diào)度框架 XXL-JOB,MongoDB,爬蟲(chóng)等相關(guān)資料。

          后臺(tái)回復(fù)?學(xué)習(xí)資料?領(lǐng)取學(xué)習(xí)視頻


          如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  91爱爱 | 美女逼网站 | 毛片av免费看 | 日本亚洲欧洲视频 | 一本道无码在线免费 |