Сбой сборки Maven: пакет не существует

У меня странная проблема: у меня есть один проект maven, который зависит от другого проекта maven (оба мои), и я получаю сообщение об ошибке компиляции, жалующееся на то, что пакеты не существуют, хотя они существуют.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  10.424 s
[INFO] Finished at: 2020-12-22T07:32:51-05:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project e1-task-info2: Compilation failure: Compilation failure:
[ERROR] /C:/Users/jgagnon/workspace/java/e1-task-info2/src/main/java/com/mycompany/e1tasks/backend/util/ExcelFileIngester.java:[10,42] package com.mycompany.exceljson.converter does not exist
[ERROR] /C:/Users/jgagnon/workspace/java/e1-task-info2/src/main/java/com/mycompany/e1tasks/backend/util/ExcelFileIngester.java:[11,37] package com.mycompany.exceljson.pojo does not exist
[ERROR] /C:/Users/jgagnon/workspace/java/e1-task-info2/src/main/java/com/mycompany/e1tasks/backend/util/ExcelFileIngester.java:[12,37] package com.mycompany.exceljson.pojo does not exist

Я провел исследование (в том числе на этом форуме) и нашел множество статей по этому вопросу. Я воспользовался некоторыми из найденных советов, но они все еще не работают. Я не понимаю, что я делаю неправильно.

Вот сценарий:

Проект A предоставляет функциональность, которую должен использовать проект B.

Проект A 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>com.mycompany</groupId>
  <artifactId>excel-to-json</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>Excel to JSON Converter</name>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.3.RELEASE</version>
  </parent>

  <properties>
    <java.version>11</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

    <commons-io.version>2.6</commons-io.version>
    <commons-cli.version>1.4</commons-cli.version>
    <org.apache.poi.version>4.1.2</org.apache.poi.version>
  </properties>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>

  <repositories>
    <repository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>${org.apache.poi.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>${org.apache.poi.version}</version>
    </dependency>

    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>${commons-io.version}</version>
    </dependency>

    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <version>${commons-cli.version}</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

Проект B 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>com.mycompany</groupId>
  <artifactId>e1-task-info2</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.3.RELEASE</version>
  </parent>

  <packaging>jar</packaging>

  <properties>
    <java.version>11</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  </properties>

  <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>

  <repositories>
    <repository>
      <id>central</id>
      <url>https://repo1.maven.org/maven2/</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-devtools</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>javax.validation</groupId>
      <artifactId>validation-api</artifactId>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>

    <!-- The dependency -->
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>excel-to-json</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>

  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

Когда я создаю свои проекты maven, я почти всегда использую mvn clean install. Я дошел до того, что полностью удалил свой ~/.m2/repository и восстановил его, но он все равно не работает.

Насколько я знаю, вы не можете использовать проекты с весенней загрузкой в ​​качестве зависимостей. Поэтому вам нужно изменить родительский POM вашей зависимости.

J Fabian Meier 22.12.2020 14:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
2 149
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как поясняется в документации, проект Spring Boot не подходит в качестве зависимости для проектов, так как файлы классов размещаются где-то там, где их не видит другой проект, в BOOT-INF/classes: https: //docs.spring.io/spring-boot/docs/1.5.x/maven-plugin/examples/repackage-classifier.html

Хорошо, тогда что мне делать? Нужно ли мне реорганизовать проект зависимостей, чтобы он не был Spring Boot? Какие еще есть варианты?

Joseph Gagnon 22.12.2020 14:21

Я обнаружил, что работает добавление <attach>false</attach> в конфигурацию плагина весенней загрузки. Я пытался добавить классификатор, но это не сработало. docs.spring.io/spring-boot/docs/1.5.x/maven-plugin/examples/‌​…

Joseph Gagnon 22.12.2020 14:30

Обратите внимание, что это означает, что ваш исполняемый файл не развернут в вашем репозитории maven.

tgdavies 22.12.2020 14:33

Я предполагаю, что вы имеете в виду любой исполняемый файл зависимости (проект A)? Если да, то нет проблем. На самом деле это утилита для использования другими проектами, а не что-то, что будет запускаться само по себе.

Joseph Gagnon 22.12.2020 14:38

Тогда все в порядке — возможно, вам вообще не нужна цель переупаковки?

tgdavies 22.12.2020 14:40

Давайте продолжим обсуждение в чате.

Joseph Gagnon 22.12.2020 15:17

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

Увеличение времени сборки maven в AWS CodeBuild после интеграции с репозиторием AWS CodeArtifact для maven
Используйте мультиплатформенную библиотеку Kotlin от JFrog Artifactory
Переопределение exec-maven-plugin с помощью exec.mainClass
Пропустить выполнение плагина сонара, если тесты maven пропущены
Kotlin/Java – несуществующая ссылка в аннотации Java для параметра свойства компиляции конструктора
Как добавить один файл в существующую версию временной метки моментального снимка в Sonatype Nexus
Не удается запустить программу «C:\Program Files (x86)\Java\jdk1.8.0_11\jre\bin\java.exe»: ошибка CreateProcess = 206, имя файла или расширение слишком длинное
Разверните приложение в образе микродокера payara из сценария оболочки
Получите номер версии зависимости из pom.xml с помощью командной строки и используйте этот номер версии, чтобы пометить образ докера
При сборке maven должен вызвать spring-boot-maven-plugin на шагах 1 и 3. Могу ли я избежать предупреждения «обнаружено дублирующее объявление плагина»?