试图通过另一个外部jar引用外部jar - httpcore通过httpclient

时间:2013-11-07 14:03:49

标签: java jar classpath osb

在eclipse中运行junit时,一切正常。当我将我的jar部署到Oracle Serviec总线并通过代理调用它时,我遇到了问题。

我的jar使用httpClient& httpCore,httpClient也对httpCore有一些依赖。当httpclient引用httpcore而没有从我的jar中引用时,就会出现问题。我已经证明,通过编辑httpclient的清单来获取httpcore jar,外部jar引用另一个jar。如果我这样做,一切正常,但我不想像你期望的那样手动编辑外部罐子!

我的清单有这个类路径集: 类路径:httpcore-4.3.jar httpclient-4.3.1.jar DatabaseUtil-1.0.jar commons-codec-1.8.jar

我正在努力将jar添加到服务器的类路径中,我认为这样可行,但检查是否有另一种方法来执行此操作,因为有其他服务/ 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());
    }

  } 
}

2 个答案:

答案 0 :(得分:1)

  1. 您使用的是OSB java callout活动吗?

  2. 您是否未找到班级(或其他例外)?

  3. 什么是DatabaseUtil-1.0.jar,它是您制作并在标注中使用的吗?

  4. 我认为在这个答案中对这些问题的回答是正确的。

    您需要两个(未修改的)罐子才能使代码正常工作。

    如果您不想将两个jar放在服务器类路径中(Oracle推荐用于常见工件),则可以将这些jar包装在callout中使用的自定义jar中。这可能是好的(取决于用例),因为两个罐总共约1MB。见How can I create an executable JAR with dependencies using Maven?

    记住你需要commons-codec和其他一些依赖项,检查http://mvnrepository.com/是否有完整列表。

答案 1 :(得分:0)

最后我坚持使用Ant并使用了zipgroupfileset标签。这会将外部jar类捆绑到jar中。这有点乱,因为它正在提取类并将它们复制到你的jar而不是捆绑罐子。我敢肯定有一种方法来捆绑罐子和可能来自arkonautom的maven解决方案(谢谢你的方式)将为你做这件事(我没有时间,所以从来没有尝试过)。

我提出的其他解决方案 - 将jar复制到$ domain / lib文件夹。这也有效,但发现我还必须将jar文件部署到文件夹中,否则我的java callout出现问题时看不到代码。我没有花时间调查 - 使用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>