簡體   English   中英

嘗試通過另一個外部jar引用外部jar-通過httpclient的httpcore

[英]Trying to reference an external jar through another external jar - httpcore through httpclient

在Eclipse中運行junit時,一切正常。 當我將jar部署到Oracle Serviec Bus並通過代理進行調用時,出現了問題。

我的jar使用httpClient和httpCore,httpClient也對httpCore有一些依賴性。 當httpclient引用httpcore而不被我的jar引用時,就會發生問題。 我已經通過編輯httpclient的清單以具有httpcore jar來證明是外部jar引用了另一個。 如果我這樣做,所有的工作都可以,但是我不想像您期望的那樣手動編輯外部jars!

我的清單中設置了以下類路徑:類路徑:httpcore-4.3.jar httpclient-4.3.1.jar DatabaseUtil-1.0.jar commons-codec-1.8.jar

我正在將jars添加到服務器的類路徑中,並且我認為這會起作用,但是檢查是否有另一種方法可以執行此操作,因為其他服務/ jar使用相同的jvm。 我已在下面復制了一個測試課程以顯示問題證明

任何幫助深表感謝。

謝謝,丹尼爾。

public class CheckHTTPJars {

  public static String checkHttpJarsLoaded()
  {

    try {
        System.out.println("Starting...");
        System.out.println("classpath: " + System.getProperty("java.class.path"));

        HttpHost host = new HttpHost("test");

        System.out.println("Hit HTTPCore... ");

        BasicResponseHandler b = new BasicResponseHandler();

        System.out.println("Hit HTTPClient... ");

        HttpGet get = new HttpGet();

        System.out.println("Hit HTTPClient but referencing HttpCore... ");

        HttpRequest h = null;

        System.out.println("Hit HTTPCore... ");


        return("Passed");
    } catch (Exception e) {
        return (e.getMessage());
    }

  } 
}
  1. 您正在使用OSB Java標注活動嗎?

  2. 您是否找不到類 (或其他異常)?

  3. 什么是DatabaseUtil-1.0.jar,它是由您制作並在標注中使用的數據庫嗎?

我認為這些問題的答案在這個答案中是正確的。

您需要兩個(未修改的)jar才能使代碼正常工作。

如果您不想將兩個jar都放置在服務器類路徑中(Oracle建議使用通用工件),則可以將其與標注中使用的自定義jar捆綁在一起。 看到這兩個罐子總計約1MB,這可能是好的(取決於用例)。 請參閱如何使用Maven創建具有依賴項的可執行JAR?

記住您需要commons編解碼器和這兩個其他依賴項,請查看http://mvnrepository.com/以獲取完整列表。

最后,我堅持使用Ant,並使用zipgroupfileset標記。 這會將外部jar類捆綁到您的jar中。 這有點混亂,因為它正在提取類並將其復制到您的jar中,而不是將jar捆綁到其中。我敢肯定,有一種方法可以捆綁jar,並且可能來自arkonautom的maven解決方案(順便說一下)為您做到這一點(我沒時間了,所以從來沒有嘗試過)。

我遇到了其他麻煩的解決方案-將罐子復制到$ domain / lib文件夾中。 這也可行,但是發現我也必須將jars部署到文件夾中,或者我的java標注看不到代碼時遇到了麻煩。 我沒有花任何時間進行調查-使用java.net URLConnection重寫了代碼。 這也可行,但是在本地運行時授權有麻煩,因此最終決定反對。

希望這可以幫助其他人...

        <zipgroupfileset dir="lib">
              <include name="httpclient-4.3.1.jar"/>
              <include name="httpcore-4.3.jar"/>
              <include name="commons-codec-1.8.jar"/>
        </zipgroupfileset> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM