1

在eclipse中运行junit时,这一切都很好。当我将我的 jar 部署到 Oracle Serviec Bus 并通过代理调用它时,我遇到了问题。

我的 jar 使用了 httpClient & httpCore,httpClient 也对 httpCore 有一些依赖。当 httpclient 引用 httpcore 而没有从我的 jar 中引用时,就会出现问题。我已经证明这是通过编辑 httpclient 的清单以拥有 httpcore jar 来引用另一个的外部 jar。如果我这样做,所有工作都可以,但我不想像您期望的那样手动编辑外部 jar!

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

我正在努力将 jars 添加到服务器的类路径中,我认为这会起作用,但检查是否有另一种方法可以做到这一点,因为有其他服务/jars 使用相同的 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());
    }

  } 
}
4

2 回答 2

1
  1. 你在使用 OSB java 标注活动吗?

  2. 您是否得到Class not found(或其他异常)?

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

我假设在这个答案中对这些问题的回答是正确的。

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

如果您不想将两个 jar 放在服务器类路径中(Oracle 推荐用于常见工件),您可以将它们与标注中使用的自定义 jar 捆绑在一起。这可能没问题(取决于用例),因为两个 jar 总共约为 1MB。请参阅如何使用 Maven 创建具有依赖项的可执行 JAR?

请记住,您需要 commons-codec 和这两者的其他一些依赖项,请查看http://mvnrepository.com/以获取完整列表。

于 2013-11-08T21:11:58.720 回答
0

最后我坚持使用 Ant 并使用 zipgroupfileset 标签。这会将外部 jar 类捆绑到您的 jar 中。这有点混乱,因为它正在提取类并将它们复制到您的 jar 中,而不是将 jar 捆绑在其中。我确信有一种方法可以捆绑 jar,并且可能来自 arkonautom 的 maven 解决方案(顺便谢谢)将为你做这个(我没时间了,所以从来没有尝试过)。

我遇到的其他解决方案 - 将 jar 复制到 $domain/lib 文件夹。这也有效,但发现我也必须将 jar 部署到文件夹中,否则我的 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> 
于 2013-11-15T10:28:40.183 回答