2016-12-26 120 views
5

我在这看到了很多关于stackoverflow的问题。但是我仍然无法知道我的建设项目的方式是什么问题。“无法找到符号”错误在maven

我有两个spring引导项目:我们 - 数据和我们的网络。我们网络依赖于我们的数据。我们的数据在maven上编译得很好。但是,我们网络给了我上面的错误。

我们数据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> 

我们的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> 

每次我Maven的 “干净编译包安装” 在我们的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的构建路径上。我想让它通过,因为我想引发这场战争。请帮忙。我在我们的数据上做了“干净的编译包安装”,然后在我们的网络上完成。 “更新maven项目”也没有帮助我。

+0

看起来像包不匹配 - 请更正导入并解决这个'com.we.service不存在'。希望这可以解决构建 –

+0

@ClementAmarnath:不,包的导入是正确的。如果是这种情况,我不应该让我们的网站运行。但它运行良好。我只在做Maven构建时才会出错。我在这两个项目中都有相同的包装结构。会导致任何问题吗?更新了问题。 – User1230321

+0

在这种情况下,请尝试删除您的.m2 for'we-data',构建'we-data'然后'we-web' –

回答

2

每次我做maven“clean compile package install”目标在我们的web上我 得到maven错误。所有这些抱怨的符号未找到 都在我们数据项目。

1)我想你应该阅读关于Maven pom herelifecycle in Maven的介绍。

mvn clean compile package install 

是多余的编译和打包阶段,因为在安装阶段包括以下阶段( 所以,这样做只是:

mvn clean install 

2)你的Web模块,你运行Maven的目标要求在com.we:data:0.0.1-SNAPSHOT依赖与你的实际代码:

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

如果您添加或修改代码,你不安装此MODUL e,Web模块无法看到这些更改。

所以你应该在com.we:data模块中做mvn clean install模块,然后在web模块中完成。

最后,最简单的方法是避免非更新的依赖关系,从multi-module project开始运行mvn clean install,它汇总了这些模块。

+0

我一直在建立我们的数据,然后建立我们的网络。但现在,我正在执行“mvn clean install”而不是“mvn clean compile package install”(谢谢)。这不起作用。我想按照您的建议为此创建多模块项目。但我不知道如何创建多模块“spring boot”项目(也是spring引导maven模块(如果我听起来很愚蠢,请原谅))。让我知道你是否可以帮助我,或者我应该在stackoverflow上打开一个新的问题。 – User1230321

+0

不客气。 “这不起作用。”拥有一个多模块项目不会在编译时解决缺失的类。它只允许构建更健壮的版本,因为所有命令都是这样。你能否详细说明你的错误,编辑你的帖子并显示所有相关信息(例如缺少类的包)? – davidxxx

10

我一直停留在这个问题上太一天终于找到了根本原因和解决方案在这里我做了什么:

,如果你对你的POM以下行(你的情况是我们数据的 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> 

得到了0123的线索后,我发现他正确的jar编译将不会是一个正常的jar,如果你使用spring-boot-maven-plugin,谢谢你的线索无论如何。

,也请了这个问题: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> 

它就像一个魅力。

+0

为我工作..默认情况下,弹簧启动jar依赖不起作用。 – inaitgaJ

0

在pom.xml中,添加depedency

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

和类,你正在使用@Inject进口javax.inject.Inject import javax.inject.Inject;