Hi Nick, 

There is a package named "org.apache.flink.table.api.java" in flink and so the 
import of "org.apache.flink.table.api._" causes 
"org.apache.flink.table.api.java" imported. Then all the import of package 
starting with "java" such as "import java.util.ArrayList" will try to find the 
classes under "org.apache.flink.table.api.java" as Scala uses relative import 
by default. So I think nothing is wrong here. This is the behavior of Scala 
language. You just need to use prefix of "_root_" to force using absolute 
import. 

Regards,
Dian

> 在 2019年9月26日,下午10:26,Nicholas Walton <nwal...@me.com> 写道:
> 
> Dian
> 
> That fixed the problem thanks you. It would appear that someone has taken it 
> upon themselves to redefine part of the Java standard library in 
> org.apache.flink.table.api._
> 
> NIck
> 
>> On 26 Sep 2019, at 15:16, Dian Fu <dian0511...@gmail.com 
>> <mailto:dian0511...@gmail.com>> wrote:
>> 
>> Hi Nick,
>> 
>>>> [error] ………………/src/main/scala/org/example/Job.scala:30:13: object util is 
>>>> not a member of package org.apache.flink.table.api.java
>>>> [error] import java.util.ArrayList
>> 
>> 
>> The error message shows that it tries to find "util.ArrayList" under package 
>> "org.apache.flink.table.api.java". So you can try one of the following two 
>> solutions:
>> 1) Don't import "org.apache.flink.table.api._"
>> 2) Use absolute import: "import _root_.java.util.ArrayList"
>> 
>> Regards,
>> Dian
>> 
>>> 在 2019年9月26日,下午10:04,Nicholas Walton <nwal...@me.com 
>>> <mailto:nwal...@me.com>> 写道:
>>> 
>>> I’ve shrunk the problem down to a minimal size. The code 
>>> 
>>> package org.example
>>> 
>>> import org.apache.flink.table.api._
>>> import org.apache.http.HttpHost
>>> 
>>> import java.util.ArrayList
>>> 
>>> object foo {
>>> 
>>>   val httpHosts = new ArrayList[HttpHost]
>>>   httpHosts.add(new HttpHost("samwise.local", 9200, "http"))
>>> 
>>> }
>>> will not compile, but remove the import org.apache.flink.table.api._ and 
>>> all is well
>>> 
>>> Nick
>>> 
>>> 
>>>> On 26 Sep 2019, at 12:53, Nicholas Walton <nwal...@me.com 
>>>> <mailto:nwal...@me.com>> wrote:
>>>> 
>>>> I’m having a problem using ArrayList in Scala . The code is below
>>>> 
>>>> import org.apache.flink.core.fs._
>>>> import org.apache.flink.streaming.api._
>>>> import org.apache.flink.streaming.api.scala._
>>>> import org.apache.flink.table.api._
>>>> import org.apache.flink.table.api.scala._
>>>> import org.apache.flink.table.sinks._
>>>> import org.apache.http.HttpHost
>>>> import org.slf4j.LoggerFactory
>>>> 
>>>> import java.util.ArrayList
>>>> 
>>>> object Job {
>>>> 
>>>>   val httpHosts = new ArrayList[HttpHost]
>>>>   httpHosts.add(new HttpHost("samwise.local", 9200, "http"))
>>>>     …..
>>>> 
>>>> }
>>>> 
>>>> Scala refuses to recognise ArrayList. The IDE InteliJ likewise flags 
>>>> java.util as not existing, even though it recognises ArrayList and suggest 
>>>> auto-insertion of the import java.utils.ArrayList statement. The 
>>>> compilation errors are
>>>> 
>>>> [error] ………………/src/main/scala/org/example/Job.scala:30:13: object util is 
>>>> not a member of package org.apache.flink.table.api.java
>>>> [error] import java.util.ArrayList
>>>> [error]             ^
>>>> [error] ………………/src/main/scala/org/example/Job.scala:34:23: not found: type 
>>>> ArrayList
>>>> [error]   val httpHosts = new ArrayList[HttpHost]
>>>> [error]                       ^
>>>> [error] two errors found
>>>> [error] (Compile / compileIncremental) Compilation failed
>>>> 
>>>> Without the ArrayList reference the code compiles with no errors.
>>>> 
>>>> The sbt build file, if it helps is,
>>>> 
>>>> resolvers in ThisBuild ++= Seq("Apache Development Snapshot Repository" at 
>>>> "https://repository.apache.org/content/repositories/snapshots/ 
>>>> <https://repository.apache.org/content/repositories/snapshots/>", 
>>>> Resolver.mavenLocal)
>>>> 
>>>> name := "Flink MultiChannel Project"
>>>> 
>>>> version := "0.1-SNAPSHOT"
>>>> 
>>>> organization := "org.example"
>>>> 
>>>> scalaVersion in ThisBuild := "2.11.0"
>>>> 
>>>> val flinkVersion = "1.8.1"
>>>> 
>>>> val flinkDependencies = Seq(
>>>>   "org.apache.flink" %% "flink-scala" % flinkVersion ,
>>>>   "org.apache.flink" %% "flink-table" % "1.7.2" ,
>>>>   "org.apache.flink" %% "flink-connector-elasticsearch" % flinkVersion,
>>>>   "org.apache.flink" %% "flink-streaming-scala" % flinkVersion,
>>>>   "org.apache.httpcomponents" % "httpclient" % "4.5.10",
>>>>   "org.apache.httpcomponents" % "httpcore" % "4.4.11")
>>>> // https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore 
>>>> <https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore>
>>>> 
>>>> lazy val root = (project in file(".")).
>>>>   settings(
>>>>     libraryDependencies ++= flinkDependencies)
>>>> 
>>>> mainClass in assembly := Some("org.example.Job")
>>>> 
>>>> // make run command include the provided dependencies
>>>> run in Compile := Defaults.runTask(fullClasspath in Compile, mainClass in 
>>>> (Compile, run), runner in (Compile, run))
>>>> 
>>>> // exclude Scala library from assembly
>>>> assemblyOption in assembly := (assemblyOption in 
>>>> assembly).value.copy(includeScala = false)
>>>> 
>>>> 
>>>> TIA
>>>> 
>>>> Nick
>>> 
>> 
> 

Reply via email to