Исключение при создании проекта Scala-Maven на IntelliJ

Я пытаюсь построить проект Scala-Maven на IntelliJ IDEA. Сразу после создания проекта написано, что сборка прошла успешно. Вот так выглядит мой 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>

Затем я попытался добавить параметры компилятора в проект, как показано ниже:

После добавления, и когда я нажимаю кнопку RUN, я получаю следующее сообщение об ошибке:

[ОШИБКА] Плагин 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 из / в центральный ( https://repo.maven.apache.org/maven2): PITC-Zscaler-EMEA- Amsterdam3PR.proxy.corporate.ge.com: неизвестный хост PITC-Zscaler-EMEA-Amsterdam3PR.proxy.corporate.ge.com -> [Помощь 1]

Я использую jdk version: 1.8.0_172 и я добавил плагин Scala прямо из плагинов. Следовательно, это последняя версия Scala. Может ли кто-нибудь дать мне знать, как я могу решить эту проблему.

1 ответ

Решение

Похоже, вам нужно настроить Maven и IntelliJ для использования настроек сетевого прокси, поскольку похоже, что вы находитесь за корпоративным брандмауэром.

Maven имеет возможность настроить прокси через свои настройки (в ~/.m2/settings.xml в Unix- подобных системах, или %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 Переменная окружения будет работать для запуска любого приложения Java / Scala / JVM, которому требуется доступ к Интернету через прокси.)

Кроме того, если параметры прокси-сервера настроены правильно или не требуются, это может быть временная проблема с сетевым подключением, поэтому убедитесь, что у вас есть подключение к Интернету, и повторите попытку. (Исключение составляет сбой Maven для загрузки плагина из центрального репозитория Maven.)

Кстати, указанная вами версия Scala - 2.7.0 - древняя и почти наверняка не будет работать с JDK 8. Либо используйте более старую JDK или более новую версию Scala (текущая версия 2.12.6).

Обратите внимание, что если вам нужно работать с текущей версией Apache Spark, вы должны использовать Scala 2.11.x - самой последней версией является 2.11.12.

ОБНОВЛЕНИЕ:

Из ваших комментариев кажется, что есть некоторая путаница в отношении ролей, которые играют Maven, плагин scala-maven, плагин IntelliJ и плагин IntelliJ Scala, поэтому я кратко изложу их здесь. Пожалуйста, потерпите меня, если я затрону темы, с которыми вы уже знакомы...

Maven - это система для создания и публикации программного обеспечения. (На самом деле он делает гораздо больше, чем просто это, поэтому Maven описывает себя как программное обеспечение для управления проектами.) Он позволяет разработчикам в одном месте указывать все зависимости их программного обеспечения (сторонние библиотеки, используемые программным обеспечением), который Maven загружает по мере необходимости из Центрального репозитория Maven - главным образом с открытым исходным кодом - или из других частных репозиториев по мере необходимости. Дополнительные параметры управляют настройкой компиляторов, выполнением тестов, созданием отчетов и т. Д.

Maven был разработан в первую очередь для разработки Java- языковых проектов. Scala -maven-plugin обеспечивает поддержку языка и компилятора Scala в Maven. Именно этот плагин загружает версию компилятора 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.version} утверждает, что номер версии хранится как значение свойства с именем scala.version, Ваш pom.xml В файле также есть строки в верхней части, которые создают это свойство:

<project ...>
  ...
  <properties>
    <scala.version>2.7.0</scala.version>
  </properties>
  ...
</project>

Итак, вы можете видеть, что вы будете использовать версию 2.7.0 компилятора Scala. Если вы хотите использовать последнюю версию Scala, вы должны изменить это на:

<project ...>
  ...
  <properties>
    <scala.version>2.12.6</scala.version>
  </properties>
  ...
</project>

Хорошо, теперь вы будете использовать последнюю версию компилятора Scala. Теперь давайте перейдем к IntelliJ...

IntelliJ IDEA - это интегрированная среда разработки (IDE), в первую очередь предназначенная для разработки на языке Java. Он обеспечивает подсветку синтаксиса, интеллектуальное завершение кода и другие функции, упрощающие процесс написания кода. Чтобы предоставить эти возможности языку программирования Scala, вам необходимо установить его плагин Scala.

Вы можете настроить IntelliJ для использования любой версии Scala, установленной на вашем компьютере. Затем IntelliJ узнает, как скомпилировать, собрать и запустить ваше программное обеспечение, и сможет работать без использования определения сборки вашего файла объектной модели проекта (POM) Maven.

Однако одной из причин использования Maven является обеспечение согласованной среды сборки для разработки проекта, чтобы она не зависела от того, что каждый разработчик мог или не мог установить на своей машине. По этой причине, если в проекте используется Maven, рекомендуется сообщить IntelliJ. Таким образом, IntelliJ может использовать Maven pom.xml файл для указания версии компилятора, загрузки зависимостей, настройки параметров компилятора и т. д.

Таким образом, приведенная выше информация должна помочь вам начать работу с вашим проектом, работать с сетевым прокси-сервером вашей корпорации и использовать последнюю версию Scala, используя Maven и IntelliJ.

Другие вопросы по тегам