2016-12-26 146 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;