我試圖了解 Scala 代碼如何在 Java 的 IDE 中與 Java 一起作業。我在使用 Spark Java 時遇到了這個疑問,我在代碼中也看到了 Scala 包并使用了相應的類和方法。
我的理解是,Scala 代碼需要 Scala 的編譯器將其轉換為 Java.class 檔案,然后從它們開始,JDK 在 JVM 中發揮作用,將其轉換為二進制檔案并執行操作。如果我錯了,請糾正我。
之后,在 Eclipse 中的 spark Java 專案中,我看不到任何指向 scala 編譯器的地方。
這是我的 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>spark</groupId>
<artifactId>Project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath />
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId>
</exclusion> </exclusions> -->
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql-kafka-0-10_2.12</artifactId>
<version>3.0.0</version>
</dependency>
<!-- Gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
<scope>provided</scope>
</dependency>
<!-- Avro Messages -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-avro_2.12</artifactId>
<version>3.1.2</version>
</dependency>
<!-- Spark MLLIB -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.12</artifactId>
<version>3.0.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.janino/janino -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--Spark java.lang.NoClassDefFoundError: org/codehaus/janino/InternalCompilerException -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>commons-compiler</artifactId>
<version>3.0.16</version>
</dependency>
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
<version>3.0.16</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
例如,我在我的 Java 類檔案中使用下面的 scala 匯入。但實際上并沒有得到從哪個 Jars 中挑選以及在哪里編譯為 Java.class 以進行進一步處理的 Idea。
import scala.collection.JavaConverters;
誰能幫我理解這個對我來說未知的魔法?
uj5u.com熱心網友回復:
依賴項以類檔案的形式提供。這個JavaConverters類必須的確是由編譯scalac。然而,JANINO的維護者已經這樣做了在他們的硬體,運編譯的結果mavencentral的服務器,它分發給所有的鏡子,這是怎么回事結束了你的系統的磁盤,這就是為什么你沒有需要scalac使用它。
uj5u.com熱心網友回復:
罐子,他們只編譯了檔案。他們將沒有源檔案。如果您使用任何依賴項,它不是源,它是編譯輸出。因此,在您的情況下,JavaConverters, 也已編譯。它來自scala.collection內置包的包。
我可以知道你的系統上安裝了 Scala 嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/405121.html
標籤:
