我在stackoverflow上看到很多关于此的问题。但是我仍然无法知道建设项目的方式是什么问题。
我有两个春季启动项目:we-data和we-web。 we-web依赖于we-data。 we-data在maven上编译得很好。但是我们网络给了我上面的错误。
we-data pom:
<?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>
we-web pom:
<?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>
每次我在we-web上做maven“clean compile package install”目标我都会遇到maven错误。所有抱怨的符号都在we-data项目中。出于某种原因,它表示在we-web中找不到所有类别的we-data。但是当我将应用程序作为spring boot app运行时,一切都很好。没有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:
.
.
STS使用了1.8 jdk。而且我还没有将we-data项目放在we-web的构建路径上。我想要通过,因为我想要产生这场战争。请帮忙。我正在对we-data进行“clean compile package install”,然后在we-web上进行。 “更新maven项目”对我没有帮助。
答案 0 :(得分:20)
我一直坚持这个问题一天,终于在这里找到了根本原因和解决方案:
如果您的pom上有以下行(对于您的情况是 we-data的 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得到线索后,我发现如果你使用spring-boot-maven-plugin
,那么编译的jar是正确的,不会是正常的jar,无论如何都要感谢线索。
还请检查此问题:Dependency not found in Spring Boot project
我试过用这个:
<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>
它就像一个魅力。
答案 1 :(得分:4)
每次我做maven&#34;清理编译包安装&#34;我们网上的目标我 得到maven错误。所有抱怨的符号都没有找到 都在我们的数据项目中。
1)我认为你应该阅读有关Maven pom here和lifecycle in Maven的介绍。
mvn clean compile package install
对于编译和包阶段是多余的,因为安装阶段包括这些阶段(。 所以,只做这件事:
mvn clean install
2)运行maven目标的Web模块需要com.we:data:0.0.1-SNAPSHOT
依赖于您的实际代码:
<dependency>
<groupId>com.we</groupId>
<artifactId>data</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
如果您添加或修改代码而未安装此模块,则Web模块无法看到这些更改。
因此,您应该先在mvn clean install
模块中执行com.we:data
,然后再在网络模块中执行此操作。
最后,最简单的避免具有非更新的依赖关系是从聚合这些模块的multi-module project运行mvn clean install
。
答案 2 :(得分:1)
在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)错误。
答案 3 :(得分:0)
在pom.xml中,添加依赖
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
和你正在使用的类@Inject导入javax.inject.Inject import javax.inject.Inject
;
答案 4 :(得分:0)
我遇到了同样的错误“找不到符号”。
我前后有2个Maven模块,尽管有依赖性,但前模块无法访问后模块。
问题出在back模块的pom.xml上。我删除了这些行:
.net core
而我只是在前pom模块中获得了这些行。