在 IntelliJ 上构建 Scala-Maven 项目时出现异常
Exception while building Scala-Maven project on IntelliJ
我正在尝试在 IntelliJ IDEA 上构建一个 Scala-Maven 项目。创建项目后,它说构建成功。这就是我的 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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dbloads.pgms</groupId>
<artifactId>Arts</artifactId>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2008</inceptionYear>
<properties>
<scala.version>2.7.0</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.specs</groupId>
<artifactId>specs</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>true</downloadSources>
<buildcommands>
<buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
</buildcommands>
<additionalProjectnatures>
<projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
</additionalProjectnatures>
<classpathContainers>
<classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
<classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>
</classpathContainers>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
接下来我尝试在项目中添加编译器选项,如下所示:
添加后,当我单击 运行 按钮时,我收到以下错误消息:
[ERROR] Plugin net.alchim31.maven:scala-maven-plugin:3.4.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for net.alchim31.maven:scala-maven-plugin:jar:3.4.0: Could not transfer artifact net.alchim31.maven:scala-maven-plugin:pom:3.4.0 from/to central (https://repo.maven.apache.org/maven2): PITC-Zscaler-EMEA-Amsterdam3PR.proxy.corporate.ge.com: Unknown host PITC-Zscaler-EMEA-Amsterdam3PR.proxy.corporate.ge.com -> [Help 1]
我正在使用 jdk version: 1.8.0_172
并且我直接从插件中添加了 Scala 插件。因此它是最新版本的 Scala。
谁能告诉我如何解决这个问题。
看来您需要配置 Maven 和 IntelliJ 才能使用网络代理设置,因为看起来您可能落后于公司防火墙。
Maven 能够通过其设置配置代理(在 Unix 类系统上的 ~/.m2/settings.xml
中,或 [=69= 上的 %HOME%\.m2\settings.xml
]Windows),如下:
<settings ...>
.
.
<proxies>
<!-- You can have one of these for each possible proxy. -->
<proxy>
<active>true</active>
<!-- Pick some ID for your proxy here. -->
<id>corp-proxy</id>
<!-- Choose your protocol here. E.g. "http", "socks4" or "socks5" -->
<protocol>http</protocol>
<!-- Specify the proxy server name (or IP address) and port of your proxy here. -->
<host>proxy.example.com</host>
<port>8080</port>
<!-- Identify any hosts here that you can access directly. It's unlikely that you'll
need this unless you have a proxy repository (such as Nexus, Artifactory, etc.) on
your corporate network. -->
<nonProxyHosts>www.google.com|*.example.com</nonProxyHosts>
<!-- The following fields are only necessary if required by your proxy. If you need to
enter your own username and password, make sure you do not add this file to version
control! -->
<username>proxyuser</username>
<password>somepassword</password>
</proxy>
</proxies>
.
.
</settings>
同时,IntelliJ 通过其设置配置为使用代理。有关详细信息,请参阅 。 (请注意,通过 JAVA_OPTS
环境变量设置代理信息将适用于 运行ning 任何 Java/Scala/JVM 需要通过代理访问 Internet 的应用程序。)
或者,如果您的代理设置配置正确或不需要,则可能是暂时的网络连接问题,因此请确保您有 Internet 连接,然后重试。 (例外是 Maven 从 Maven 中央存储库下载插件失败。)
顺便说一句,您指定的 Scala 版本 — 2.7.0 — 是 ancient 并且几乎肯定无法与 JDK 8. 使用较旧的 JDK 或更新版本的 Scala(当前版本是 2.12.6)。
请注意,如果您需要使用当前版本的 Apache Spark,您当前必须使用 Scala 2.11.x - 最新版本是 2.11.12.
更新:
根据您的评论,Maven、scala-maven-plugin、IntelliJ 和 IntelliJ Scala 插件,所以我将在这里快速总结它们。如果我涵盖了您已经熟悉的主题,请耐心等待...
Maven 是一个用于构建和发布软件的系统。 (它实际上做的远不止这些,这就是为什么 Maven 将自己描述为 项目管理 软件的原因。)它允许开发人员指定,在一个地方,他们所有软件的依赖项(软件使用的第三方库),Maven 根据需要从 Central Maven Repository 下载——主要是 open -source—或根据需要来自其他私有存储库。进一步的设置控制编译器的配置方式、测试 运行、生成的报告等
Maven 主要是为 Java 语言项目的开发而开发的。 scala-maven-plugin 在 Maven 中提供对 Scala 语言和编译器的支持。正是这个插件下载了您的项目指定的 Scala 编译器版本,并使用它来编译和构建您的源代码。
如果您查看 Maven 项目的 pom.xml
文件,您会注意到 build
部分中的以下行:
<project ...>
...
<build>
...
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
...
</build>
...
</project>
然后在 reporting
部分:
<project ...>
...
<reporting>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
在这两种情况下,都有一行显示为 <scalaVersion>${scala.version}</scalaVersion>
,它告诉 Maven 您想要哪个版本的 Scala使用。该插件然后使用此版本的 Scala 编译器,并让 Maven 将其下载到您机器上的缓存本地存储库(通常在 C:\Users\{your account}\.m2
在 Windows 机器上)。请注意,Maven 和 scala-maven-plugin 都会忽略您安装的任何版本的 Scala在你的机器上。
那么要为您下载哪个版本的 Scala?值 ${scala.version}
表示版本号存储为名为 scala.version
的 属性 的值。您的 pom.xml
文件在靠近顶部的位置也有创建此 属性 的行:
<project ...>
...
<properties>
<scala.version>2.7.0</scala.version>
</properties>
...
</project>
因此,您可以看到您将使用 Scala 编译器的 2.7.0 版。如果你想使用最新的 Scala 版本,你应该将其更改为:
<project ...>
...
<properties>
<scala.version>2.12.6</scala.version>
</properties>
...
</project>
好的,现在您将使用最新版本的 Scala 编译器。现在让我们继续 IntelliJ...
IntelliJ IDEA 是一个集成开发环境 (IDE), 主要针对 Java 语言的开发。它提供语法高亮、智能代码补全和其他功能来简化编写代码的过程。为了为 Scala 编程语言提供这些功能,您需要安装它的 Scala 插件。
您可以配置 IntelliJ 以使用您机器上安装的任何版本的 Scala。 IntelliJ 将知道如何编译、构建和 运行 您的软件,并且可以在不使用您的 Maven 项目对象模型 的情况下工作(POM) 文件的构建定义。
然而,使用 Maven 的原因之一是确保开发项目的构建环境一致,这样它就不会随每个开发人员的心血来潮或可能没有安装在他们的机器上。为此,如果项目使用Maven,告诉IntelliJ是个好主意。这样,IntelliJ就可以使用Maven的pom.xml
文件来指定编译器的版本,下载依赖,配置编译器设置等
因此,以上信息应该可以帮助您启动-运行您的项目,使用您公司的网络代理并使用最新版本的 Scala , 使用 Maven 和 IntelliJ.
我正在尝试在 IntelliJ IDEA 上构建一个 Scala-Maven 项目。创建项目后,它说构建成功。这就是我的 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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dbloads.pgms</groupId>
<artifactId>Arts</artifactId>
<version>1.0-SNAPSHOT</version>
<inceptionYear>2008</inceptionYear>
<properties>
<scala.version>2.7.0</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.specs</groupId>
<artifactId>specs</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<configuration>
<downloadSources>true</downloadSources>
<buildcommands>
<buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand>
</buildcommands>
<additionalProjectnatures>
<projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature>
</additionalProjectnatures>
<classpathContainers>
<classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
<classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer>
</classpathContainers>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
接下来我尝试在项目中添加编译器选项,如下所示:
添加后,当我单击 运行 按钮时,我收到以下错误消息:
[ERROR] Plugin net.alchim31.maven:scala-maven-plugin:3.4.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for net.alchim31.maven:scala-maven-plugin:jar:3.4.0: Could not transfer artifact net.alchim31.maven:scala-maven-plugin:pom:3.4.0 from/to central (https://repo.maven.apache.org/maven2): PITC-Zscaler-EMEA-Amsterdam3PR.proxy.corporate.ge.com: Unknown host PITC-Zscaler-EMEA-Amsterdam3PR.proxy.corporate.ge.com -> [Help 1]
我正在使用 jdk version: 1.8.0_172
并且我直接从插件中添加了 Scala 插件。因此它是最新版本的 Scala。
谁能告诉我如何解决这个问题。
看来您需要配置 Maven 和 IntelliJ 才能使用网络代理设置,因为看起来您可能落后于公司防火墙。
Maven 能够通过其设置配置代理(在 Unix 类系统上的 ~/.m2/settings.xml
中,或 [=69= 上的 %HOME%\.m2\settings.xml
]Windows),如下:
<settings ...>
.
.
<proxies>
<!-- You can have one of these for each possible proxy. -->
<proxy>
<active>true</active>
<!-- Pick some ID for your proxy here. -->
<id>corp-proxy</id>
<!-- Choose your protocol here. E.g. "http", "socks4" or "socks5" -->
<protocol>http</protocol>
<!-- Specify the proxy server name (or IP address) and port of your proxy here. -->
<host>proxy.example.com</host>
<port>8080</port>
<!-- Identify any hosts here that you can access directly. It's unlikely that you'll
need this unless you have a proxy repository (such as Nexus, Artifactory, etc.) on
your corporate network. -->
<nonProxyHosts>www.google.com|*.example.com</nonProxyHosts>
<!-- The following fields are only necessary if required by your proxy. If you need to
enter your own username and password, make sure you do not add this file to version
control! -->
<username>proxyuser</username>
<password>somepassword</password>
</proxy>
</proxies>
.
.
</settings>
同时,IntelliJ 通过其设置配置为使用代理。有关详细信息,请参阅 JAVA_OPTS
环境变量设置代理信息将适用于 运行ning 任何 Java/Scala/JVM 需要通过代理访问 Internet 的应用程序。)
或者,如果您的代理设置配置正确或不需要,则可能是暂时的网络连接问题,因此请确保您有 Internet 连接,然后重试。 (例外是 Maven 从 Maven 中央存储库下载插件失败。)
顺便说一句,您指定的 Scala 版本 — 2.7.0 — 是 ancient 并且几乎肯定无法与 JDK 8. 使用较旧的 JDK 或更新版本的 Scala(当前版本是 2.12.6)。
请注意,如果您需要使用当前版本的 Apache Spark,您当前必须使用 Scala 2.11.x - 最新版本是 2.11.12.
更新:
根据您的评论,Maven、scala-maven-plugin、IntelliJ 和 IntelliJ Scala 插件,所以我将在这里快速总结它们。如果我涵盖了您已经熟悉的主题,请耐心等待...
Maven 是一个用于构建和发布软件的系统。 (它实际上做的远不止这些,这就是为什么 Maven 将自己描述为 项目管理 软件的原因。)它允许开发人员指定,在一个地方,他们所有软件的依赖项(软件使用的第三方库),Maven 根据需要从 Central Maven Repository 下载——主要是 open -source—或根据需要来自其他私有存储库。进一步的设置控制编译器的配置方式、测试 运行、生成的报告等
Maven 主要是为 Java 语言项目的开发而开发的。 scala-maven-plugin 在 Maven 中提供对 Scala 语言和编译器的支持。正是这个插件下载了您的项目指定的 Scala 编译器版本,并使用它来编译和构建您的源代码。
如果您查看 Maven 项目的 pom.xml
文件,您会注意到 build
部分中的以下行:
<project ...>
...
<build>
...
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<args>
<arg>-target:jvm-1.5</arg>
</args>
</configuration>
</plugin>
...
</build>
...
</project>
然后在 reporting
部分:
<project ...>
...
<reporting>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.0</version>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
</configuration>
</plugin>
</plugins>
</reporting>
</project>
在这两种情况下,都有一行显示为 <scalaVersion>${scala.version}</scalaVersion>
,它告诉 Maven 您想要哪个版本的 Scala使用。该插件然后使用此版本的 Scala 编译器,并让 Maven 将其下载到您机器上的缓存本地存储库(通常在 C:\Users\{your account}\.m2
在 Windows 机器上)。请注意,Maven 和 scala-maven-plugin 都会忽略您安装的任何版本的 Scala在你的机器上。
那么要为您下载哪个版本的 Scala?值 ${scala.version}
表示版本号存储为名为 scala.version
的 属性 的值。您的 pom.xml
文件在靠近顶部的位置也有创建此 属性 的行:
<project ...>
...
<properties>
<scala.version>2.7.0</scala.version>
</properties>
...
</project>
因此,您可以看到您将使用 Scala 编译器的 2.7.0 版。如果你想使用最新的 Scala 版本,你应该将其更改为:
<project ...>
...
<properties>
<scala.version>2.12.6</scala.version>
</properties>
...
</project>
好的,现在您将使用最新版本的 Scala 编译器。现在让我们继续 IntelliJ...
IntelliJ IDEA 是一个集成开发环境 (IDE), 主要针对 Java 语言的开发。它提供语法高亮、智能代码补全和其他功能来简化编写代码的过程。为了为 Scala 编程语言提供这些功能,您需要安装它的 Scala 插件。
您可以配置 IntelliJ 以使用您机器上安装的任何版本的 Scala。 IntelliJ 将知道如何编译、构建和 运行 您的软件,并且可以在不使用您的 Maven 项目对象模型 的情况下工作(POM) 文件的构建定义。
然而,使用 Maven 的原因之一是确保开发项目的构建环境一致,这样它就不会随每个开发人员的心血来潮或可能没有安装在他们的机器上。为此,如果项目使用Maven,告诉IntelliJ是个好主意。这样,IntelliJ就可以使用Maven的pom.xml
文件来指定编译器的版本,下载依赖,配置编译器设置等
因此,以上信息应该可以帮助您启动-运行您的项目,使用您公司的网络代理并使用最新版本的 Scala , 使用 Maven 和 IntelliJ.