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

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

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

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

問題描述

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

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

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

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

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

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

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

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路徑。我假設(shè)通過將url修改為指向清單會給出所需的結(jié)果,但我得到的結(jié)果是:

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()獲得)都已經(jīng)錯誤了。應(yīng)該是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();

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

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

分享到:
標(biāo)簽:JAR 版本 讀取
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定