日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了讀取類的JAR版本的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

對于Web服務客戶端,我希望使用JAR文件中的Implementation-Title和Implementation-Version作為用戶代理字符串。問題是如何讀取JAR的清單。

這個問題已經被問了很多次,但是答案似乎不適用于我。(例如Reading my own Jar's Manifest)

問題在于,簡單地讀取/META-INF/MANIFEST.MF幾乎總是產生錯誤的結果。在我的情況下,它幾乎總是指JBoss。

https://stackoverflow.com/a/1273196/4222206中提出的解決方案
這對我來說是有問題的,因為您必須硬編碼庫名稱來停止迭代,然后它仍然可能意味著同一個庫的兩個版本在類路徑上,您只返回第一個-不一定是正確的-命中。

https://stackoverflow.com/a/1273432/4222206中的解決方案
似乎只使用jar://URL,這在JBoss中完全失敗,在JBoss中,應用程序類加載器生成vfs://URL。

類中的代碼是否有辦法查找其自己的清單?

我嘗試了上面提到的項目,這些項目似乎在從java命令行運行的小型應用程序中運行得很好,但是我想要一個便攜的解決方案,因為我無法預測我的庫稍后將在哪里使用。

public static Manifest getManifest() {
    log.debug("getManifest()");
    synchronized(Version.class) {
        if(manifest==null) {
            try {
                // this works wrongly in JBoss
                //ClassLoader cl = Version.class.getProtectionDomain().getClassLoader();
                //log.debug("found classloader={}", cl);
                //URL manifesturl = cl.getResource("/META-INF/MANIFEST.MF");

                URL jar = Version.class.getProtectionDomain().getCodeSource().getLocation();
                log.debug("Class loaded from {}", jar);

                URL manifesturl = null;
                switch(jar.getProtocol()) {
                    case "file":
                        manifesturl = new URL(jar.toString()+"META-INF/MANIFEST.MF");
                        break;
                    default:
                        manifesturl = new URL(jar.toString()+"!/META-INF/MANIFEST.MF");
                }


                log.debug("Expecting manifest at {}", manifesturl);
                manifest = new Manifest(manifesturl.openStream());
            }
            catch(Exception e) {
                log.info("Could not read version", e);
            }
        }
    }

代碼將檢測正確的JAR路徑。我假設通過將url修改為指向清單會給出所需的結果,但我得到的結果是:

Class loaded from vfs:/C:/Users/user/Documents/JavaLibs/wildfly-18.0.0.Final/bin/content/webapp.war/WEB-INF/lib/library-1.0-18.jar
Expecting manifest at vfs:/C:/Users/user/Documents/JavaLibs/wildfly-18.0.0.Final/bin/content/webapp.war/WEB-INF/lib/library-1.0-18.jar!/META-INF/MANIFEST.MF
Could not read version: java.io.FileNotFoundException: C:UsershiranDocumentsJavaLibswildfly-18.0.0.Finalstandalone	mpvfs	emp	empfc75b13f07296e98content-e4d5ca96cbe6b35eWEB-INFliblibrary-1.0-18.jar!META-INFMANIFEST.MF (The system cannot find the path specified)

我檢查了該路徑,似乎連JAR的第一個URL(通過Version.class.getProtectionDomain().getCodeSource().getLocation()獲得)都已經錯誤了。應該是C:UsersuserDocumentsJavaLibswildfly-18.0.0.Finalstandalone mpvfs emp empfc75b13f07296e98content-e4d5ca96cbe6b35eWEB-INFliblibrary-1.0.18.jar.

所以這甚至可能指向WildFly中的問題?

推薦答案

我似乎在這里找到了一些合適的解決方案:
https://stackoverflow.com/a/37325538/4222206

因此,最終此代碼可以(至少)在JBoss中顯示JAR的正確版本:

this.getClass().getPackage().getImplementationTitle();
this.getClass().getPackage().getImplementationVersion();

希望我下次搜索時能找到這個答案.

這篇關于讀取類的JAR版本的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:JAR 版本 讀取
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定