не могу найти ошибку символа в maven

Я вижу много вопросов по этому поводу в stackoverflow. Но все же я не могу понять, в чем проблема в моем способе создания проектов.

У меня есть два проекта весенней загрузки: we-data и we-web. мы-веб зависит от мы-данных. we-data отлично компилируется на maven. Но we-web выдает мне вышеописанную ошибку.

мы-данные пом:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.we</groupId>
    <artifactId>data</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>we-data</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </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-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

мы-веб пом:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.we</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>we-web</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </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>
        </dependency>

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

        <dependency>
            <groupId>com.we</groupId>
            <artifactId>data</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Каждый раз, когда я выполняю цели maven «чистая установка пакета компиляции» в we-web, я получаю ошибку maven. Все символы, на которые он жалуется, не найдены, находятся в проекте we-data. По какой-то причине он говорит, что все классы we-data не могут быть найдены в we-web. Но когда я запускаю приложение как весеннее загрузочное приложение, все в порядке. Для этого не имеет значения ошибка maven.:

[INFO] ------------------------------------------------------------------------
[INFO] Building we-web 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ web ---
[INFO] Deleting C:\Users\user\Documents\GitHub\we\we-web\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ web ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ web ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 10 source files to C:\Users\user\Documents\GitHub\we\we-web\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/user/Documents/GitHub/we/we-web/src/main/java/com/we/controller/EmployeeController.java:[13,25] package com.we.service does not exist
[ERROR] /C:/Users/user/Documents/GitHub/we/we-web/src/main/java/com/we/controller/EmployeePaymentController.java:[22,9] cannot find symbol
  symbol:   class EmployeeService
  location: class com.we.controller.EmployeePaymentController
.
.
.
[INFO] 44 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.322 s
[INFO] Finished at: 2016-12-26T15:30:54+05:30
[INFO] Final Memory: 26M/253M
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "pom.xml" could not be activated because it does not exist.
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project web: Compilation failure: Compilation failure:
.
.

У меня 1.8 jdk используется STS. А также я не поставил проект we-data на путь сборки для we-web. Я хочу, чтобы это прошло, потому что я хочу создать из этого войну. Пожалуйста помоги. Я делаю «чистую установку пакета компиляции» на we-data, а затем делаю это на we-web. «Обновить проект maven» мне тоже не помогает.


person User1230321    schedule 26.12.2016    source источник
comment
Похоже на несоответствие пакетов - пожалуйста, исправьте импорт и устраните эту com.we.service does not exist. Надеюсь, это должно решить сборку   -  person Clement Amarnath    schedule 26.12.2016
comment
@ClementAmarnath: Нет, с импортом пакетов все в порядке. Если бы это было так, я бы не запустил веб-сайт. Но работает нормально. Я получаю сообщение об ошибке только при сборке maven. У меня одинаковая структура пакета в обоих проектах. Может ли это вызвать какие-то проблемы? Обновил вопрос.   -  person User1230321    schedule 26.12.2016
comment
В этом случае попробуйте удалить свой .m2 для we-data, построить we-data, а затем we-web   -  person Clement Amarnath    schedule 26.12.2016
comment
Не создавайте 2 проекта весенней загрузки. Вы не должны включать проект с весенней загрузкой в ​​другой проект с весенней загрузкой. Банка не является обычной банкой, поэтому ресурсы не могут быть найдены (хотя до версии 1.4 это работало, вам все равно не следует этого делать). Сделайте we-data обычным jar, а не spring boot jar. Если они оба являются автономными проектами, то в первую очередь не следует зависеть от другого.   -  person M. Deinum    schedule 27.12.2016


Ответы (5)


Я тоже застрял на этой проблеме в течение дня и, наконец, нашел основную причину и решение здесь, что я сделал:

если у вас есть следующие строки в вашем pom (для вашего случая это we-data's pom)

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>

вы должны удалить эти строки и изменить на:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
</plugin>

после получения подсказки от M. Deinum я обнаружил, что он прав в отношении того, что скомпилированный jar не будет обычным jar, если вы используете spring-boot-maven-plugin, в любом случае спасибо за подсказку.

а также проверьте этот вопрос: Зависимость не найдена в проекте Spring Boot

Я пытался использовать это:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
                <configuration>
                    <classifier>exec</classifier>
                </configuration>
            </execution>
        </executions>
    </plugin>

Работает как часы.

person Sal Prima    schedule 27.02.2017
comment
У меня сработало. Зависимость Spring boot jar не работала по умолчанию. - person inaitgaJ; 01.11.2017
comment
Добавление классификатора конфигурации exec исправило это и для меня. Он выводит два отдельных jar-файла при сборке: один обычный app.jar (такой же, как при сборке без этого плагина) и новый для толстого jar-файла app-exec.jar. Из вашего объяснения, что толстая банка не распознается как обычная банка, я предполагаю, что для ее исправления необходимо присутствие оригинальной. Ваше здоровье! - person Babyburger; 28.03.2021

Каждый раз, когда я выполняю цели maven «чистая установка пакета компиляции» в we-web, я получаю ошибку maven. Все символы, на которые он жалуется, не найдены, находятся в проекте we-data.

1) Я думаю, вам следует прочитать введение в Maven pom здесь и жизненного цикла в Maven.

mvn clean compile package install

является избыточным для этапов компиляции и пакета, поскольку этап установки включает эти этапы (. Итак, сделайте это только:

mvn clean install

2) Ваш веб-модуль, в котором вы запускаете цель maven, требует зависимости com.we:data:0.0.1-SNAPSHOT с вашим фактическим кодом:

    <dependency>
        <groupId>com.we</groupId>
        <artifactId>data</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

Если вы добавите или измените код и не установите этот модуль, веб-модуль не увидит эти изменения.

Поэтому вам следует выполнить mvn clean install в модуле com.we:data, прежде чем делать это в веб-модуле.

Наконец, самый простой способ избежать необновляемой зависимости — запустить mvn clean install из многомодульного проекта., который объединяет эти модули.

person davidxxx    schedule 26.12.2016
comment
Сначала я строил мы-данные, а затем мы-сеть. Но теперь я делаю mvn clean install вместо mvn clean compile package install (спасибо за это). Это не работает. Я хотел бы создать многомодульный проект для этого, как вы предложили. Но я не знаю, как создать многомодульный проект весенней загрузки (также модуль весенней загрузки maven (извините, если я звучу глупо)). Дайте мне знать, если вы можете помочь мне в этом, или я должен открыть новый вопрос в stackoverflow. - person User1230321; 27.12.2016
comment
Пожалуйста. Это не работает. Наличие многомодульного проекта не решит отсутствующий класс во время компиляции. Это позволяет только иметь более надежную сборку, поскольку все упорядочено. Можете ли вы подробно описать свою ошибку, отредактировать свой пост и показать всю соответствующую информацию (например, пакет с отсутствующими классами)? - person davidxxx; 27.12.2016

В моем случае в приложении Spring Boot у меня была следующая служба и сопутствующие закрытые классы в одном файле ServiceFoo.java:

@Service
public class ServiceFoo {
}
class Foo { }
class Bar { }

В какой-то момент Maven начал терпеть неудачу с cannot find symbol: class Service.

Только после переноса классов Foo и Bar в отдельные java файлы (Foo.java и Bar.java соответственно) ошибка исчезла. Похоже на ошибку Maven (3.5.2 и 3.6.3) или Java (1.8.0_201).

person mp31415    schedule 26.03.2020

В pom.xml добавьте зависимость

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

и класс, в котором вы используете @Inject Import javax.inject.Inject import javax.inject.Inject;

person Dinesh Sharma    schedule 07.02.2018

У меня такая же ошибка, не могу найти символ.

У меня есть 2 модуля maven спереди и сзади, и передний модуль не может получить доступ к заднему модулю, несмотря на зависимость.

Проблема была в pom.xml в заднем модуле. Я удаляю эти строки:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>

и я только что получил эти строки в переднем модуле pom.

person Patrikoko    schedule 01.12.2020