【问题标题】:find the jar that contains a given java class找到包含给定 java 类的 jar
【发布时间】:2015-05-17 12:38:53
【问题描述】:

我正在尝试查找哪个 .jar 检测到此错误,以便找出问题所在。这是在 hyperion 服务器上运行的。

[2015-03-15T15:18:35.352+08:00] [Planning0] [WARNING] [] [oracle.EPMHSP.calcmgr_execution] [tid: 144] [userId: <anonymous>] [ecid: 00iRyJJB65hDOd5LzQL6iW000ly40016YL,0:1] [APP: PLANNING#11.1.2.0] [URI: /HyperionPlanning/faces/RunTimePromptTF/BgImage] [SRC_CLASS: com.hyperion.planning.adf.artifact.datacontrol.HspManageArtifactsDC] [SRC_METHOD: executeCalcScript] Error detected while attempting to run job Test_Rule [[
com.hyperion.planning.HspRuntimeException: Error detected while attempting to run job: Test_Rule.
  at com.hyperion.planning.HspAsyncJobsManager.completeJobExceution(HspAsyncJobsManager.java:101)
  at com.hyperion.planning.db.HspFMDBImpl$CalcMgrWrapper.runRule(HspFMDBImpl.java:10411)
  at com.hyperion.planning.db.HspFMDBImpl.runHBRRule(HspFMDBImpl.java:2254)
  at com.hyperion.planning.db.HspFMDBImpl.runCalcScript(HspFMDBImpl.java:2218)
  at com.hyperion.planning.HyperionPlanningBean.runCalcScript(HyperionPlanningBean.java:4028)
  at com.hyperion.planning.adf.artifact.datacontrol.HspManageArtifactsDC.executeCalcScript(HspManageArtifactsDC.java:3518)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at oracle.adf.model.binding.DCInvokeMethod.invokeMethod(DCInvokeMethod.java:677)
  at oracle.adf.model.bean.DCBeanDataControl.invokeMethod(DCBeanDataControl.java:445)

【问题讨论】:

    标签: java hyperion


    【解决方案1】:

    如果您运行的是 linux/unix 风格,我通常会通过以下 bash 脚本找到 jar:

    for i in $( find LIB_FOLDERS -iname *.jar | xargs ); do 
        ( zipinfo $i | grep -i PATTERN ) && echo $i ; done
    

    LIB_FOLDERS 是您的 jar 所在的位置,PATTERN 是您要查找的类名称的特征部分。这将打印与该模式匹配的所有 jar 文件的名称。大多数 IDE 允许您“在类路径中搜索一个类”,而无需任何命令行麻烦,但我不知道您是否将所有源代码都加载到一个中。

    【讨论】:

      【解决方案2】:

      在 linux 系统上,我使用以下命令创建 ~/bin/findjar,然后 chmod 700 并将 ~/bin 添加到我的 PATH:

      #!/bin/bash
      
      # Usage: findjar <classname or string to search for> [path to search under]
      #
      class=$1
      path=$2
      
      if [[ "$path" = "" ]]; then
        path=.
      fi
      echo searching for $class in $path
      for f in `find $path -name "*.jar"`; do
        match=$(jar tf $f | grep $class);
        if [[ -n "$match" ]]; then
          echo
          echo $f;
          echo "$match"
        fi;
      done
      

      【讨论】:

        【解决方案3】:

        使用 JarScan。这是我最喜欢的工具之一,用于搜索埋在某个目录中某个 jar 中的类。适用于任何平台,简单易用:https://java.net/projects/jarscan/pages/Tutorial/text

        【讨论】:

          猜你喜欢
          • 2011-09-28
          • 2020-05-14
          • 2021-10-02
          • 2023-03-29
          • 2011-03-30
          • 1970-01-01
          • 1970-01-01
          • 2017-11-27
          • 1970-01-01
          相关资源
          最近更新 更多