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

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

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

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

<?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 по "чистой установке пакета компиляции" в веб-сети, я получаю ошибку maven. Все символы, на которые эта жалоба не найдена, находятся в проекте we-data. По некоторым причинам в нем говорится, что все классы we-данных не могут быть найдены в we-web. Но когда я запускаю приложение как приложение весенней загрузки, все в порядке. Для этого не имеет значения maven error.

[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 Project" тоже мне не помогает.

3 ответа

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

если у вас есть следующие строки на поме (для вашего случая это помета мы-данные)

    <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, я обнаружил, что он прав насчет скомпилированной банки, которая не будет нормальной 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>

Отлично работает.

Каждый раз, когда я выполняю задачи maven по "чистой установке пакета компиляции" в веб-сети, я получаю ошибку 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 из многомодульного проекта, который объединяет эти модули.

В моем случае в приложении 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).

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

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

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

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

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

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

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

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

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