Gradle构建webapp并不存在错误

时间:2014-03-26 09:22:14

标签: servlets gradle

我使用Gradle构建我的Web应用程序。 我创建了src / main / webapp / WEB-INF / lib来放置名为foo.jar的jar文件 foo.jar中的类如下:

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'
}

我错过了什么或做错了吗? 感谢

1 个答案:

答案 0 :(得分: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') ... } Gradle将负责将其复制到WAR中的适当位置。

您可以在上面的代码段中看到的另一件事是使用用于Servlet API的providedCompile配置。这意味着您的代码将针对此库进行编译,但它不会包含在WAR中。这是避免Web应用程序和servlet容器中这些类之间发生冲突的正确方法。