Dear all,
I created a gradle java project with intellij. In this project i first created my Main java class who then creates a scala object from an imported self created package.
I followed the suggestion from
And with this i can build , but the runScala and runJava task are not working and the resulting jar file with the build task gives me an error like:
java -jar JavaTOscala-1.0-SNAPSHOT.jar
Scala launched10
Starting scalaRunner Singleton Object
Exception in thread “main” java.lang.NoClassDefFoundError: scala/collection/Seq
at com.scalabnp.scalaRunner.StartRead(scalaRunner.scala)
at com.javabnp.MainRunner.main(MainRunner.java:16)
Caused by: java.lang.ClassNotFoundException: scala.collection.Seq
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 2 more
Here is the very simple javacode:
package com.javabnp;
import com.scalabnp.scalaRunner;
class MainRunner {
public static void main (String[] args)
{
scalaRunner SC = new scalaRunner();
System.out.println("Scala launched" + SC.printme(5));
System.out.println("Starting scalaRunner Singleton Object");
scalaRunner.StartRead();
}
}
and here is the scalacode:
package com.scalabnp
import scala.sys.process._
class scalaRunner {
def printme(x: Int) : Int={
return x * 2;
}
}
object scalaRunner {
def someProcessing(line: String): Unit = {
print("[just read this line] ")
println(line)
}
// the file to read
val file = "/var/log/wifi.log"
// the process to start
val tail = Seq("tail", "-f", file)
def StartRead(): Unit = {
while(true){
tail.lineStream.foreach(someProcessing)
}
}
}
And here is the build.gradle file:
group 'Scalalearn’
version ‘1.0-SNAPSHOT’
apply plugin: 'java'
apply plugin: 'scala'
sourceCompatibility = 1.8
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
def mainClassName = "com.javabnp.MainRunner"
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'org.scala-lang:scala-library:2.11.8'
compile group: 'org.apache.kafka', name: 'kafka_2.10', version: '0.10.2.1'
compile group: 'org.apache.flink', name: 'flink-scala_2.11', version: '1.4.0'
testCompile 'org.scalatest:scalatest_2.11:3.0.0'
testCompile 'junit:junit:4.12'
testRuntime 'org.scala-lang.modules:scala-xml_2.11:1.0.6'
}
jar {
manifest {
attributes(
'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
'Main-Class': 'com.javabnp.MainRunner'
)
}
}
sourceSets {
main.scala.srcDir "src/main/java"
main.java.srcDirs = []
test.scala.srcDir "src/test/java"
test.java.srcDirs = []
}
task runJava(type: JavaExec, dependsOn: classes) {
main= 'com.javabnp.mainRunner'
classpath sourceSets.main.runtimeClasspath
classpath configurations.runtime
}
task runScala(type: JavaExec, dependsOn: classes) {
main= 'com.scalabnp.scalaRunner'
classpath sourceSets.main.runtimeClasspath
classpath configurations.runtime
}
Thanks for your help and advice,
Didier