intellij scala: Ошибка: не удалось найти или загрузить основной класс - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть проект НИОКР, который читает данные из Oracle и записывает их в автономный кластер Spark, используя scala & intellij

. Это мой build.sbt с библиотекой Зависимости

name := "DB_Oracle_V07"
version := "0.1"
scalaVersion := "2.11.12"
// https://mvnrepository.com/artifact/org.apache.spark/spark-core
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.0"
// https://mvnrepository.com/artifact/org.apache.spark/spark-sql
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.0"
// https://mvnrepository.com/artifact/org.apache.spark/spark-hive
libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.4.0"

мой проект.основной класс без искрового синтаксиса

package com.xxxx.spark

import java.io.FileWriter
import java.sql.{Connection, DriverManager}
import java.text.SimpleDateFormat
import java.util.Calendar

import scala.collection.mutable.ArrayBuffer

object query01 {

  var dateStart = ""
  case class DF_LOT_INFO(LOT_NUMBER: String, MACHINE: String, FACILITY: String, LOT_TYPE: String, REC_DATE: String, FILE_NAME: String)

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

    val cal = Calendar.getInstance
    cal.add(Calendar.DATE, 1)
    val date = cal.getTime
    val format1 = new SimpleDateFormat("yyyyMMdd_HHmmss")
    dateStart = format1.format(date)

    print_log("start")

    val url = "jdbc:oracle:thin:@TMDT1PEN.XXXX.XXXX.COM:1521:TMDT1"

    //val driver = "oracle.jdbc.OracleDriver"
    val driver = "oracle.jdbc.driver.OracleDriver"

    val username = "TMDB_XXXX"

    val password = "XXXXXXXX"

    val connection:Connection = null

    val result = ArrayBuffer[String]()

    try{

      print_log("Class.forName start")

      val app_dir = System.getProperty("user.dir")
      print_log("current dir: " + app_dir)
      val java_class_path = System.getProperty("java.class.path")
      print_log("java_class_path: " + java_class_path)

      Class.forName(driver)

      var testing = Class.forName(driver)


      print_log("Class.forName end")

      //DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver)

      val connection = DriverManager.getConnection(url, username, password)


      val statement = connection.createStatement

      val rs = statement.executeQuery("select * from tester")

      var i = 1
      while(rs.next){
        val item = rs.getString("tester_name")
        println("data:" + item)
        print_log("data:" + item)
        result.append(item)
        i = i + 1
      }

      values('aaaaa','bbbbb',sysdate)")

    }
    catch{
      //case unknown => println("Got this unknown exception: " + unknown)
      case unknown => print_error_log("Unknown exception: " + unknown)
    }
    finally{

    }
    print_log("end")

  }

  def print_log(msg:String): Unit = {
    val fw = new FileWriter(dateStart + "_log.txt", true)
    try {
      fw.write("\n" + msg)
    }
    finally fw.close()
  }

  def print_error_log(msg:String): Unit = {
    val fw = new FileWriter(dateStart + "_error_log.txt", true)
    try {
      fw.write("\n" + msg)
    }
    finally fw.close()
  }

}

я строю артефакт как обычно и добавил ojdbc6.jar в свой проект .jar в качестве библиотеки оракула

ojdbc6.jar

но мне не удается выполнить файл jar моего проекта, и я получаю сообщение об ошибке ниже

Error: Could not find or load main class com.xxxx.spark.query01

вслепую я удалил все файлы jar, извлеченные с помощью spark, в моем проекте .jar или создал новый проект без какой-либо библиотеки Зависимости вbuild.sbt, тогда я смог выполнить свой проект .jar без ошибок.

С помощью вышеупомянутого слепого теста я уверен, что ошибка вызвана библиотекой spark. Любой эксперт может посоветовать мне, как решить эту ошибку?Спасибо за все:)

...