2014-03-26 52 views
0

我使用Gradle構建我的web應用程序。 我創建的src /主/ web應用/ WEB-INF/lib中放置一個名爲foo.jar中 而在foo.jar中類我的jar文件是以下幾點:Gradle構建webapp並不存在錯誤

package com.foo.util; 

class FooUtil { 
    public static say() { System.out.println("Hello World"); } 
} 

而在我的Servlet,我寫下面的代碼使用方法:

import com.foo.util.FooUtil; 

... 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    FooUtil.say(); 
} 

最後,我鍵入以下命令來構建項目:

gradle clean build 

不過,我會得到錯誤類似以下內容:

:clean 
:compileJava 
package com.foo.util does not exist 
import com.foo.util.FooUtil; 

以下是我的build.gradle文件:

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'jetty' 
apply plugin: 'idea' 
apply plugin: 'eclipse' 

sourceCompatibility = 1.7 
version = '1.0' 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile 'javax.servlet:javax.servlet-api:3.1.0' 
    testCompile 'junit:junit:4.11' 
    testCompile 'org.mockito:mockito-all:1.9.5' 
} 

難道我錯過了什麼或做什麼了嗎? 謝謝

回答

2

你爲什麼不讀http://www.gradle.org/docs/current/userguide/war_plugin.html

首先:它會更好地把你的foo.jar到其他文件夾一樣libs,然後宣佈它作爲一個編譯依賴

dependencies { providedCompile 'javax.servlet:javax.servlet-api:3.1.0' compile files('libs/foo.jar') ... } 搖籃將在你的戰爭將其複製到適當的地方照顧。

您可以在上面的代碼片段中看到的另一件事是使用用於Servlet API的providedCompile配置。這意味着你的代碼將會針對這個庫進行編譯,但它不會被包含在WAR中。這是避免這些類與Web應用程序和servlet容器發生衝突的正確方法。