在IntelliJ上构建Scala-Maven项目时出现异常

时间:2018-06-16 09:11:14

标签: scala maven intellij-idea scala-maven-plugin

我正在尝试在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>

接下来我尝试在项目中添加编译器选项,如下所示: enter image description here

添加后,当我点击RUN按钮时,收到以下错误消息:

  

[ERROR]插件net.alchim31.maven:scala-maven-plugin:3.4.0或其中一个依赖项无法解析:无法读取net.alchim31.maven的工件描述符:scala-maven-plugin: jar:3.4.0:无法传输工件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:未知主机PITC-Zscaler-EMEA-Amsterdam3PR.proxy.corporate.ge.com - &gt; [帮助1]

我正在使用jdk version: 1.8.0_172,我已直接从插件中添加了Scala插件。因此它是Scala的最新版本。 任何人都可以让我知道如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

您似乎需要配置 Maven IntelliJ 才能使用网络代理设置,因为看起来您可能会在公司防火墙后面。

Maven可以通过其设置配置代理(在 Unix 类系统中的~/.m2/settings.xml Windows 上的%HOME%\.m2\settings.xml) ,如下:

<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 配置为通过其设置使用代理。有关详细信息,请参阅this answer。 (请注意,通过JAVA_OPTS环境变量设置代理信息将适用于运行任何需要的 Java / Scala / JVM 应用程序通过代理访问 Internet 。)

或者,如果您的代理设置配置正确或不需要,则可能是临时网络连接问题,因此请确保您具有 Internet 连接,然后重试。 (例外情况是 Maven 无法从 Maven 中央存储库下载插件。)

顺便说一下,你指定的 Scala 的版本是古代,几乎可以肯定不能用于 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的要求下载 - 主要是开源 - 或根据需要从其他私有存储库。进一步的设置控制编译器的配置方式,运行测试,生成报告等等。

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 )文件的情况下工作。 ; s构建定义。

但是,使用 Maven 的原因之一是确保开发项目的一致构建环境,以便每个开发人员可能安装或不安装的任何内容都不是随心所欲。他们的机器。因此,如果项目使用 Maven ,那么告诉 IntelliJ 是一个好主意。这样, IntelliJ 可以使用 Maven pom.xml文件来指定编译器的版本,下载依赖项,配置编译器设置等。

因此,上述信息可以帮助您启动并运行您的项目,使用公司的网络代理并使用最新版本的 Scala ,使用 Maven IntelliJ