Проблема с проектом модульного тестирования Scala, связанная с json4sJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема с проектом модульного тестирования Scala, связанная с json4s

Сообщение Anonymous »

Я использую scala 2.12, spark 3.1.2 и jdk 1.8 и столкнулся с проблемой зависимостей: не найден необходимый класс. Это может быть связано с ошибкой в ​​вашем пути выполнения. Отсутствует класс: org/json4s/JsonAST$JValue.

Код: Выделить всё

$scalaMajorVersion:$sparkVersion"
, упомянутый ниже, соответствует этим номерам версий.
Я создал приспособление многократного использования для тестирования, которое я хотел бы использовать в различных подмодулях моего проекта Scala для модульного тестирования конкретных искр. логика.
Мой проект разбит следующим образом:

Код: Выделить всё

├───module_a
build.gradle
│    src/
main/
scala/
SparkTransformationLogic.scala
tests/
TestSparkTransformationLogic.scala
├───common-test-utils
build.gradle
│   src/
main/
scala/
SparkTestingFixture.scala
├───module_c
build.gradle
main/
scala/
FooBarLogic.scala
tests/
TestFooBarLogic.scala
build.gradle
Я хочу повторно использовать SparkTestingFixture, который я создал в модуле common-test-utils. Если возможно, тесты должны использовать изолированные зависимости локально, но я думаю, что сейчас решаю эту проблему и отлаживаю упомянутую выше ошибку json4s.
Сборка модуля A. градиент:

Код: Выделить всё

apply plugin: 'com.company.gradle.foobar.library'

dependencies {
implementation project(":common-test-utils")

implementation("org.apache.spark:spark-core_$scalaMajorVersion:$sparkVersion"){
exclude group: "org.apache.logging.log4j"
}
implementation "org.apache.spark:spark-mllib_$scalaMajorVersion:$sparkVersion"
implementation ("org.apache.spark:spark-sql_$scalaMajorVersion:$sparkVersion"){
exclude group: "org.apache.logging.log4j"
}
implementation "org.apache.spark:spark-streaming_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-hive_$scalaMajorVersion:$sparkVersion"

implementation "com.company.yahoobug:jvm-config-api:$jvmConfigVersion"
implementation "com.company.yahoobug:sparkutils-environment:$sparkUtilsVersion"
implementation "com.company.yahoobug:sparkutils-job:$sparkUtilsVersion"
implementation "com.company.yahoobug:sparkutils-logging:$sparkUtilsVersion"
implementation "com.company.yahoobug:sparkutils-spark:$sparkUtilsVersion"

testImplementation "org.scalatest:scalatest_$scalaMajorVersion:$scalaTestVersion"
testImplementation "org.slf4j:slf4j-api:1.7.36"
testImplementation "org.json4s:json4s-jackson_2.12:3.6.7"
}
Модуль common-test-utils build.gradle:

Код: Выделить всё

plugins {
id 'scala'
}

apply plugin: "java"
apply plugin: "scala"

dependencies {
implementation("org.apache.spark:spark-core_$scalaMajorVersion:$sparkVersion")
implementation "org.apache.spark:spark-mllib_$scalaMajorVersion:$sparkVersion"
implementation("org.apache.spark:spark-sql_$scalaMajorVersion:$sparkVersion")
implementation "org.apache.spark:spark-streaming_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-hive_$scalaMajorVersion:$sparkVersion"
implementation "org.scalatest:scalatest_$scalaMajorVersion:$scalaTestVersion"

implementation "org.json4s:json4s-core_2.12:3.6.7"
implementation "org.json4s:json4s-native_2.12:3.6.7"
implementation "org.json4s:json4s-jackson_2.12:3.6.7"
}
Корневой проект build.gradle:

Код: Выделить всё

plugins {
id 'com.foobar.gradle.repos' version '0.3.10'
id 'com.foobar.gradle.foozy.library' version "1.0.23"
id 'com.github.maiflai.scalatest' version '0.35'
id 'com.foobar.gradle.checks' version '1.2.3'
}

apply from: 'versions.gradle'

allprojects {
apply plugin: "com.github.maiflai.scalatest"
group 'com.foobar.foozy'
}

subprojects {

apply plugin: 'java-library'
apply plugin: 'scala'
apply plugin: "com.foorbar.gradle.repos"
apply plugin: "com.github.maiflai.scalatest"

fooBarRepositoryPlugin {
forceGuavaVersion = false
}

tasks.withType(JavaCompile) {
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
}

configurations {
sparkTestImplementation
sparkTestRuntimeOnly
}

dependencies {
implementation "org.scala-lang:scala-library:$scalaVersion"
implementation "org.scala-lang.modules:scala-java8-compat_$scalaMajorVersion:0.9.1"
implementation "org.openjdk.jol:jol-core:0.9"  // for local object size diagnostics
implementation "commons-io:commons-io:2.4"

implementation "org.apache.hadoop:hadoop-common:$hadoopVersion"
implementation "org.apache.hadoop:hadoop-mapreduce-client-core:$hadoopVersion"
implementation("org.apache.spark:spark-core_$scalaMajorVersion:$sparkVersion") {
exclude group: "org.apache.logging.log4j"
}
implementation "org.apache.spark:spark-mllib_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-sql_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-streaming_$scalaMajorVersion:$sparkVersion"
implementation "org.apache.spark:spark-hive_$scalaMajorVersion:$sparkVersion"

implementation "org.xerial.snappy:snappy-java:1.1.2.1"
implementation "com.amazonaws:aws-java-sdk-s3:1.11.333"
implementation "com.amazonaws:aws-java-sdk-ec2:1.11.333"
implementation "com.amazonaws:aws-java-sdk-kinesis:1.11.333"

implementation "joda-time:joda-time:$jodaVersion"
implementation "com.github.nscala-time:nscala-time_$scalaMajorVersion:2.14.0"

compile "com.datadoghq:java-dogstatsd-client:$dogstatsdVersion"

testImplementation "junit:junit:4.12"
testImplementation "org.scalatestplus:scalatestplus-junit_$scalaMajorVersion:1.0.0-M2"
testImplementation "org.scalatest:scalatest_$scalaMajorVersion:$scalaTestVersion"
testImplementation "org.mockito:mockito-all:$mockitoVersion"
implementation "com.vladsch.flexmark:flexmark-all:0.62.2"

testRuntimeOnly "org.slf4j:slf4j-jdk14:1.7.30"
testImplementation 'org.apache.logging.log4j:log4j-1.2-api:2.17.2'

}

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:5.0.0'
}
}

}

checks {
checkScalaStyle = false
}

// Script to copy audit test data
task zipTipZap {
description "Publish task"

doLast {

println("gathering audit data for $project.name")

copy { //Test Results
from ('.') {
include '**/test-results/**/TEST-*.xml'
exclude '**/build/audit_data' //exclude itself from scanning
}
into 'build/audit_data/test_results'
includeEmptyDirs false
}
}
}
Приспособление для искрового тестирования:

Код: Выделить всё

import org.apache.spark.sql.SparkSession
//import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.{BeforeAndAfterEach, Suite}

import java.io.File
import java.nio.file.Files

trait SparkSessionFixture extends BeforeAndAfterEach { this: Suite =>
@transient var spark: SparkSession = _

val warehouseLocation: String = Files.createTempDirectory("spark-warehouse").toFile.getAbsolutePath
val metastoreLocation: String = Files.createTempDirectory("spark-metastore").toFile.getAbsolutePath
val tempHadoopDir: File = Files.createTempDirectory("hadoop_home").toFile

System.setProperty("derby.system.home", metastoreLocation)
System.setProperty("hadoop.home.dir", tempHadoopDir.getAbsolutePath)

override protected def beforeEach(): Unit = {
super.beforeEach()
spark = SparkSession
.builder()
.master("local")
.appName("spark session")
.config("spark.ui.enabled", "false")
.config("spark.sql.shuffle.partitions", "1")
.config("spark.sql.warehouse.dir", warehouseLocation)
.config("javax.jdo.option.ConnectionURL", s"jdbc:derby:;databaseName=metastore_db;create=true")
.enableHiveSupport()
.getOrCreate()

}

override protected def afterEach(): Unit = {
if (spark != null) {
spark.stop()
}
super.afterEach()
}

}
Если у кого-нибудь есть предложения относительно того, что вызывает конфликт зависимостей с json4s или как изолировать искровое тестирование с помощью собственного набора зависимостей, чтобы избежать ошибки json4s, я бы ценю советы!

Подробнее здесь: https://stackoverflow.com/questions/786 ... -to-json4s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»