2017-02-28 34 views
-1

プロパティファイルを読み込もうとしていますが、以下に示すエラーが発生しました。私はScalaパッケージを書いていますプロパティファイルを読み込み、abc.scalaプログラムを呼び出そうとしています。何か助けていただければ幸いです。スレッド "main"の例外java.lang.NoSuchMethodError:org.apache.commons.beanutils.PropertyUtilsBean

ファイル: - xyz.properties

driver = "oracle.jdbc.driver.OracleDriver" 
url = "jdbc:oracle:thin:@xxxx:1521/xxxx.xxxx" 
username = "xxx" 
password = "xxx" 
input_file = "C:\\Users\\xxx\\test\\src\\main\\resources\\xxxx.xlsx" 

build.sbt

name := "xxx.xxxx.xxxxx" 

scalaVersion := "2.10.6" 

ivyScala := ivyScala.value map{ _.copy(overrideScalaVersion = true) } 


libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0", 
"com.databricks" %% "spark-csv" % "1.5.0", 
"org.apache.commons" % "commons-configuration2" % "2.1.1", 
"commons-beanutils" % "commons-beanutils" % "1.9.3", 
"org.apache.spark" %% "spark-sql" % "2.1.0", 
"org.scala-lang" % "scala-xml" % "2.11.0-M4" ) 

パッケージ

package com.xxx.zzzz.xxx1 

     import java.io.File 
     import org.apache.commons.configuration2.builder.fluent.{Configurations, Parameters} 


     object Configuration { 

      var config = new Configurations() 
      var configs = config.properties(new File("xyz.properties")) 

      var inputFile = configs.getString("input") 
      var userName = configs.getString("user_name") 
      var password = configs.getString("passwd") 
      var driver = configs.getString("driver") 
      var url = configs.getString("Url") 

     } 

メインプログラム

import org.apache.spark.{SparkConf, SparkContext} 
import org.apache.spark.sql.SQLContext 
import package com.xxx.zzzz.xxx1.Configurations 
import org.apache.commons.beanutils.PropertyUtils 


object ItalyPanelData { 
    def main(args: Array[String]): Unit = { 

     //Logger.getRootLogger().setLevel(Level.OFF) 

     println("Inside main program"+ Configuration.driver) 
     //Set the properties for spark to connect the oracle database 
     val dbProp = new java.util.Properties 
     dbProp.setProperty("driver", Configuration.driver) 
     dbProp.setProperty("user", Configuration.userName) 
     dbProp.setProperty("password", Configuration.password) 


     //Create a connection to connect spark 
     val conf = new SparkConf().setAppName("Simple Application").setMaster("local") 
     val sc = new SparkContext(conf) 
     val sqlContext = new SQLContext(sc) 

    //exception handlying 
    try { 
     //Create dataframe boject 
     val df = sqlContext.read 
     .option("location", Configuration.inputFile)  //Initiating input path 
     .option("sheetName", "xyz")      //Give the SheetName 
     .option("useHeader", "true")      //It takes the header name from excel sheet 
     .option("treatEmptyValuesAsNulls", "true") 
     .option("inferSchema", "true") 
     .option("addColorColumns", "false") 
     .load() 
     // Write into oracale database 
     df.write.mode("append").jdbc(Configuration.url, "xyz", dbProp) 
    } 
    catch { 

     case e: Throwable => e.printStackTrace(); 
    } 

     } 
} 
abc.scalaの

エラー

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.beanutils.PropertyUtilsBean.addBeanIntrospector(Lorg/apache/commons/beanutils/BeanIntrospector;)V 
at org.apache.commons.configuration2.beanutils.BeanHelper.initBeanUtilsBean(BeanHelper.java:631) 
at org.apache.commons.configuration2.beanutils.BeanHelper.<clinit>(BeanHelper.java:89) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:264) 
at com.sun.proxy.$Proxy0.<clinit>(Unknown Source) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:739) 
at org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:294) 
at org.apache.commons.configuration2.builder.fluent.Parameters.fileBased(Parameters.java:185) 
at org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:602) 
at org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:614) 
at org.apache.commons.configuration2.builder.fluent.Configurations.fileBasedBuilder(Configurations.java:132) 
at org.apache.commons.configuration2.builder.fluent.Configurations.propertiesBuilder(Configurations.java:238) 
at org.apache.commons.configuration2.builder.fluent.Configurations.properties(Configurations.java:282) 
at com.rxcorp.italy.config.Configuration$.<init>(Configuration.scala:8) 
at com.rxcorp.italy.config.Configuration$.<clinit>(Configuration.scala) 
at com.rxcorp.paneldataloading.ItalyPanelData$.main(abc.scala:12) 
+0

私の答えはあなたを最後まで助けてくれましたか?もしそうなら、ある時点で受け入れを検討してください。 – GhostCat

答えて

3

このような例外がバージョンの非互換性の指標です。

意味:あなたが書いたコード(またはそれ以上の可能性:表面の下にライブラリのいずれかが)メソッドを呼び出したい

org.apache.commons.beanutils.PropertyUtilsBean.addBeanIntrospector(BeanIntrospector[]); 

しかし事は次のとおりです。実行で、クラスPropertyUtilsBeanのファイルにそのメソッドが含まれていません。

したがって、スタック内のコンポーネントを後で理解し、Apacheコモンズライブラリのバージョン要件を確認する必要があります。

javadocを調べると、より多くのアイデアが得られます。method;それは言う通り:以来:1.9があります。

つまり、このメソッドはApache commons 1.9に追加されました。あなたのスタックのいくつかの部分は少なくともそのバージョンのコモンズを期待しています。 JVMのクラスパスには、古いものがあります。

So:クラスパスでapacheコモンズを確認してください。おそらくあなたは新しいバージョンのapacheコモンズに更新するだけで良いでしょう。 (そして、はい、多分もっとハードなデバッグ作業を意味します;少なくともビルドの設定には新しいバージョンのapacheコモンが含まれています)。

関連する問題