下篇主要讲如何用jetty插件在eclipse环境下运行web工程。
一、环境:
windows XP + eclipse3.6 + apache-maven-3.0.3 + jetty-maven-plugin8.0.0.M3
二、步骤:
在《Eclipse+Maven+jetty开发第一个web工程(上篇)》中已经介绍了如何创建web工程,接下来讲如下用jetty插件运行此工程。
1、pom.xml设置如下(注意这时选择的是80端口)
<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.zjh.web</groupId> <artifactId>com.zjh.web.frontend</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> <version>2.3.2</version> </plugin> <plugin> <!-- http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin --> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.0.0.M3</version> <configuration> <stopPort>9966</stopPort> <stopKey>foo</stopKey> <scanIntervalSeconds>0</scanIntervalSeconds> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>80</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <outputFileNameMapping>@{artifactId}@.@{extension}@</outputFileNameMapping> </configuration> </plugin> </plugins> </build> </project>
2、在src\main\webapp下创建WEB-INF目录,在此目录下创建web.xml文件。内容如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> </web-app>
3、在src\main\webapp下创建名为test.html文件。内容如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h1>我是测试代码</h1> </br>我是第二行。 </body> </html>
4、选中工程,右键选择Run as→Run Configurations….作如下设置。
点击运行。url中输入http://127.0.0.1/test.html。可以看到如下的页面。
三、问题及解决
1、之前运行的时候一直提示org.eclipse.jetty.webapp.WebAppContext找不到这个类,相关错误提示如下:
2013-6-15 19:02:44 org.sonatype.guice.bean.reflect.LoadedClass 警告: Error injecting: org.mortbay.jetty.plugin.JettyRunMojo java.lang.NoClassDefFoundError: org/eclipse/jetty/webapp/WebAppContext at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) at java.lang.Class.getDeclaredConstructors(Unknown Source) at com.google.inject.spi.InjectionPoint.forConstructorOf(InjectionPoint.java:243) at com.google.inject.internal.ConstructorBindingImpl.create(ConstructorBindingImpl.java:96) at com.google.inject.internal.InjectorImpl.createUninitializedBinding(InjectorImpl.java:628) at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:835) at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:769) at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:254) at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:205) at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:843) at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:957) at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:990) at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:951) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1003) at org.sonatype.guice.bean.reflect.AbstractDeferredClass.get(AbstractDeferredClass.java:47) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:968) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1014) at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:964) at com.google.inject.Scopes$1$1.get(Scopes.java:59) at org.sonatype.guice.bean.locators.LazyBeanEntry.getValue(LazyBeanEntry.java:79) at org.sonatype.guice.plexus.locators.LazyPlexusBean.getValue(LazyPlexusBean.java:53) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:243) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:235) at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:455) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:92) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.webapp.WebAppContext at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230) ... 47 more
事实上,这个类位于maven库中org\eclipse\jetty\下的jetty-webapp\8.0.0.M3中(注意版本号与jetty-maven-plugin相同)。因此初步判断是jetty-webapp-8.0.0.M3.jar依赖的类找不到。于是把下面的内容加到pom.xml中并进行更新。
<dependencies> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.0.0.M3</version> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.4.3</version> </dependency> </dependencies>
再运行时即可。
相关推荐
在Eclipse中配置Jetty的第一步是安装Jetty插件。你可以通过Eclipse的内置软件更新站点或Marketplace来搜索并安装Jetty插件,例如“Jetty RunWar”或“Jetty Integration”。安装完成后,重启Eclipse。 2. **创建或...
在Java Web开发中,Maven和Tomcat的集成是一个常见的需求,这有助于简化构建和部署流程。本篇文章将详细介绍如何将Maven与Tomcat7进行集成,以便在Eclipse环境中进行开发和调试。 首先,Maven是Apache软件基金会的...
在IT行业中,尤其是在Java Web开发领域,`jar`(Java Archive)包是不可或缺的一部分。`jar`文件是一种特殊格式的归档文件,它包含了多个Java类文件、资源文件以及元数据,便于代码的分发、部署和运行。本篇文章将...
新建一个Web项目是开始开发的第一步。在STS中,可以通过"File" -> "New" -> "Dynamic Web Project"来创建。在向导中,设定项目名称、目标运行环境(对应已配置的服务器)、Web应用版本等参数。完成这些设置后,STS会...
大家回想我们开发的时候搭建项目工程的时候,配置pom,各种拷贝。每次都这样是不是很麻烦。那么我们能不能整理一个基础项目基础模板出来,就这样adminstore诞生了。adminstore整合了spring,hibernate,shiro,...
在本篇学习笔记中,我们将聚焦于环境搭建和创建第一个"Hello, World!"程序。 首先,要开始学习Struts2,你需要确保你的开发环境中已经安装了以下基本组件: 1. **Java Development Kit (JDK)**:Struts2依赖于Java...
3. **创建第一个Spring Boot应用**:使用Spring Initializr创建项目,选择起步依赖,编写主类,启动应用。 4. **Web开发**:讲解如何使用Spring Boot开发RESTful API,包括控制器、模型、视图解析等。 5. **数据...
2. **内嵌Servlet容器**:可以直接打包成JAR文件,并且内置Tomcat、Jetty或Undertow作为Web服务器。 3. **简化Maven配置**:通过依赖管理来简化项目构建配置。 4. **自动配置**:Spring Boot尽可能地自动配置Spring...
【个人总结框架】这篇内容主要概述了一个基于Java的现代金融行业框架,特别强调了它在第三方支付场景中的应用,如支付宝。以下是对该框架的详细解释: 1. **框架结构**: - **Common-dal**:使用MyBatis实现,负责...
init.properties 中的管理员账号使用 mvn install 进行构建部署到 Servlet 容器的 ROOT 下并启动容器,数据库表会在第一次启动时自动建立注意:没有数据库建表 SQL 脚本,只需要手动建库,表会在第一次启动时自动...
3. **Hello World**:编写第一个Spring Boot应用,了解基本结构。 4. **自动配置**:理解自动配置的工作原理,查看`@EnableAutoConfiguration`注解。 5. **Web开发**:学习如何构建RESTful API,使用模板引擎创建...