2016-12-05 55 views
0

我在mac os中使用maven編譯spring webflow示例項目並出現錯誤。 (該項目在Windows編譯成功)mac maven無法找到符號錯誤的servlet-api.jar

因此,我創建一個簡單的Maven項目來重現錯誤。

的pom.xml

<?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/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>test</groupId> 
<artifactId>test</artifactId> 
<packaging>jar</packaging> 
<version>1.0.0</version> 

<dependencies> 
    <!-- Servlet --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 
</dependencies> 
</project> 

的src /主/爪哇/ Test.java

import javax.servlet.ServletContext; 

public class Test { 
    public void init(ServletContext context) { 
     context.setInitParameter("javax.faces.DEFAULT_SUFFIX", ".xhtml"); 
    } 
} 

MVN編譯

錯誤是: enter image description here

我認爲是maven使用了錯誤的servlet-api.jar而不是servlet,因爲指定了pom依賴關係是正確的。 (我使用javac -cp javax.servlet-api-3.0.1.jar Test.java,結果沒有錯誤)

我檢查mvn dependency:tree,結果顯示正確的servlet-api-3.0.1.jar。

我也切莫夫腳本,看看是否有一些選項來設置類路徑。 enter image description here

但我只是無法弄清楚maven如何使用哪個jar,因爲它是classpath。

+0

定義範圍爲'provided'的依賴意味着它將由你的jar運行的目標環境提供。它不會成爲你的jar的一部分......在這種情況下,你應該創建戰爭,但這不會改變一件事情......如果你將戰爭部署到像Tomcat等servlet引擎那裏的servlet api是可用的,你的戰爭將會奏效...... – khmarbaise

+0

@khmarbaise是的,我知道。即使我嘗試範圍'編譯'它仍然會出錯。現在我將這個maven項目導入到eclipse中。之後,我再次運行'mvn compile',沒有錯誤。我不知道爲什麼。 –

回答

0

這很奇怪。

我把這個測試maven項目導入eclipse後,我再次運行mvn compile,沒有發生錯誤。