带有 Maven 和 Eclipse 的 Java 动态 Web 项目

Posted

技术标签:

【中文标题】带有 Maven 和 Eclipse 的 Java 动态 Web 项目【英文标题】:Java Dynamic Web project with Maven and Eclipse 【发布时间】:2012-06-08 22:12:35 【问题描述】:

我有几个关于使用 Maven 和 Eclipse 创建 Java Web 应用程序的问题:

如何使用 Maven 创建包含 servlet、jsp 和其他类的 Java Web 项目? 它创建了一个简单的目录结构,src->main->java。我在哪里以及如何放置 web-inf 文件夹? 我需要手动将 jdbc-drivers 添加到 web-inf/lib 内的文件夹中,还是仅仅指出依赖关系就可以了? 有没有办法用 junit 测试 servlet?

【问题讨论】:

下面描述了 2 种支持 web + Maven 的方法。关于结构的区别:(1) Maven 项目具有 maven-archetype-webapp(文件 > 新建 > Maven 项目) - 在 src/main/ 下使用 webapp(Maven 风格)(2) 转换为 Maven 项目的动态 Web 项目(文件 > 新建 > 动态 Web 项目) - 使用 WebContent(Eclipse 风格) 【参考方案1】:

哇,这一次有很多问题。我承认使用 Maven 和 Eclipse 建立一个 webapp 项目可能会很棘手,所以我会尝试全部回答。

使用 Maven 创建 Web 应用程序项目

如何使用 servlets jsp 和其他使用 maven 的类创建 java web 项目?它创建了一个简单的目录结构,src->main->java。

当您创建 Java Web 项目时,最终产品应该是 WAR 或 EAR 文件。 WAR 和 EAR 文件是具有特定结构的 JAR 文件,可以部署在应用程序服务器或 servlet 容器中。

如前所述,为 Web 应用程序设置 Maven 项目的最简单方法是使用原型:

mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp

如果我们使用此原型创建项目,则会生成一个简单的目录结构和 pom.xml。该项目遵循您提到的标准 Maven 目录布局,包括 /src/main/java//src/test/java 等。Maven 使用此结构生成 WAR 文件,目标为 war:war。

请注意,此原型适用于非常简单(过时)的 Web 应用程序,但它是最好的可用起点。您可能希望放弃 web.xml 文件并创建一个支持 Servlet 3.0 的新文件。

WEB-INF 位置

我应该在哪里以及如何放置 web-inf 文件夹?

默认情况下,Maven 期望应该进入 WAR 文件根目录的资源——例如图像、html 页面和 WEB-INF 目录——驻留在/src/main/webapp/ 中。 因此 WEB-INF 文件夹应该位于 /src/main/webapp/WEB-INF/ 如果您使用 maven-archetype-webapp,则会自动创建此目录以及示例 web.xml 文件。

Eclipse 集成

您在问题标题中提到了 Eclipse,确实可以使用 m2eclipse 插件在 Eclipse 中开发 Mavenized Web 应用程序。 Eclipse 通过 WTP(Web 工具平台)对 Web 应用程序有很好的支持。

尽管互联网上的许多指南(错误地)推荐它,您不应该使用 mvn eclipse:eclipse 命令来创建 Eclipse 项目。这个插件只能为非常旧的 Eclipse 版本生成 WTP 项目(WTP 2.0 是最大值)。相反,请使用 here 中描述的 m2eclipse 插件。

依赖关系

我是否需要手动将 jdbc-drivers 添加到 web-inf/lib 内的文件夹中,或者只是指出依赖关系就可以了吗?

无需手动执行此操作,因为 Maven 的主要优势之一是依赖管理。如果您在 pom.xml 中添加范围为 compileruntime 的依赖项,则 JAR 文件将自动包含在 WAR 文件的 WEB-INF/lib/ 目录中。例如,要添加 Postgresql JDBC 驱动程序依赖项,请将其添加到您的 pom.xml:

<dependency>
    <groupId>postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>9.1-901.jdbc4</version>
</dependency>

由于未指定范围,Maven 将假定它在默认范围内编译。结果是 Maven 将在 WAR 文件中包含WEB-INF/lib/postgresql-9.1-901.jdbc4.jar

测试

有没有办法用 junit 测试 servlet?

这个问题已在 *** 上提出(并回答):

Unit testing a Java servlet Unit testing servlets

参考文献

Hello World with JSF 2.0, Glassfish 3, Maven, SVN and Eclipse.

【讨论】:

干得好。根据您描述的步骤,我的项目遇到了问题,并且希望阅读您的参考文章:“Maven 如何构建 WAR 文件”,但链接似乎已失效【参考方案2】:

您应该基于 webapp Maven 原型创建一个项目,而不是您使用的默认项目。

我正在使用 SpringSource Tool Suite,在本练习中,它与带有 m2e 的 Eclipse 相同。创建一个新的 Maven 项目并确保选择以下原型:

Maven的命令行方式是:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp

此原型会将 WEB-INF 文件夹放在正确的位置(在 src/main/webapp 下)。

您可以在http://maven.apache.org/guides/mini/guide-webapp.html找到更多信息

【讨论】:

这已经过时了。不会添加 servlet 的 jar。【参考方案3】:

只需创建一个普通的“动态 Web 项目”。然后右键单击项目名称并选择配置 > 转换为 Maven 项目。完成转换最多可能需要一分钟,因此请耐心等待。请参阅以下文章:

http://aykutakin.wordpress.com/2013/12/04/create-eclipse-dynamic-web-project-with-maven-2/

如果这不起作用,试试这个:

http://crunchify.com/how-to-create-dynamic-web-project-using-maven-in-eclipse/

【讨论】:

【参考方案4】: 第 1 步:创建您的 Web 应用程序文件夹。 第 2 步:在命令提示符下移动到该文件夹​​。 第 3 步:使用以下命令:

mvn archetype:generate -DgroupId=com.helloworld -DartifactId=HelloWorldDemo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

DarchetypeArtifactId=maven-archetype-webapp 将创建一个 maven Web 项目。

步骤 4:现在在命令提示符下进入项目文件夹并使用以下命令: mvn eclipse:eclipse -Dwtpversion=2.0 使您的项目成为 Eclipse 的动态 Web 项目,现在将这个新创建的项目导入为“现有项目

使用eclipse的m2eclipse插件在ecipe中启用MAVEN。

Web.xml 将位于 \src\main\webapp\WEB-INF

【讨论】:

以上是关于带有 Maven 和 Eclipse 的 Java 动态 Web 项目的主要内容,如果未能解决你的问题,请参考以下文章

在 Maven 配置文件中使用带有 plexus-compiler-eclipse 插件的 JAXB

maven 可以告诉 eclipse 忽略生成代码中的警告吗?

fabric-sdk-java在eclipse中的使用(撰写中)

使用带有内部库的 maven 构建 android 项目

java开发:eclipse的build和maven的compile的区别是什么?build是干嘛的

eclipse编程java项目中调用了maven。现在怎么打包成可执行程序?