1.simple weather项目介绍
maven权威指南中的例子,simple weather是一个基本的命令行驱动的应用程序,它接收邮政编码输入,然后从yahoo!weather RSS源取得数据,然后解析数据并把结果打印到标准输出
2.创建项目的基本框架
mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch04 -
DartifactId=simple-weather -DpackageName=org.sonatype.mavenbook -Dversion=1.0
成功界面如下:
3.在pom.xml中添加组织,法律和开发人员信息
<licenses>
<license>
<name>Apache 2</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>a business-friendly OSS license</comments>
</license>
</licenses>
<organization>
<name>Sonatype</name>
<url>http://www.sonatype.com</url>
</organization>
<developers>
<developer>
<id>liang</id>
<name>li liang</name>
<roles>
<role>developer</role>
</roles>
</developer>
</developers>
4.在pom.xml中添加新的依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.5</version>
</dependency>
</dependencies>
5.项目源码
Main.java:系统入口
package org.sonatype.mavenbook.weather;
import java.io.InputStream;
import org.apache.log4j.PropertyConfigurator;
public class Main{
public static void main(String[] args) throws Exception{
PropertyConfigurator.configure(Main.class.getClassLoader()
.getResource("log4j.properties"));
int zipcode = 60202;
try{
zipcode = Integer.parseInt(args[0]);
}catch(Exception e){}
new Main(zipcode).start();
}
private int zip;
public Main(int zip){
this.zip = zip;
}
public void start() throws Exception{
InputStream dataIn = new YahooRetriever().retrieve(zip);
Weather weather = new YahooParser().parser(dataIn);
System.out.println(new WeatherFormatter().format(weather));
}
}
Weather.java:java bean
package org.sonatype.mavenbook.weather;
public class Weather{
private String city;
private String region;
private String country;
private String condition;
private String temp;
private String chill;
private String humidity;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getRegion() {
return region;
}
public void setRegion(String region) {
this.region = region;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getTemp() {
return temp;
}
public void setTemp(String temp) {
this.temp = temp;
}
public String getChill() {
return chill;
}
public void setChill(String chill) {
this.chill = chill;
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
}
YahooRetriever.java: 连接到Yahll!weather并返回来自数据源的InputStream
package org.sonatype.mavenbook.weather;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.log4j.Logger;
public class YahooRetriever{
private static Logger log = Logger.getLogger(YahooRetriever.class);
public InputStream retrieve(int zipcode) throws Exception{
log.info("retrieving weather data");
String url="http://weather.yahooapis.com/forecastrss?p=" + zipcode;
URLConnection conn = new URL(url).openConnection();
return conn.getInputStream();
}
}
YahooParser.java:解析来自Yahoo!weather的XML,返回weather对象
package org.sonatype.mavenbook.weather;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.io.SAXReader;
public class YahooParser{
private static Logger log = Logger.getLogger(YahooParser.class);
public Weather parser(InputStream inputStream) throws Exception{
Weather weather = new Weather();
log.info("creating XML Reader");
SAXReader xmlReader = createXmlReader();
Document doc = xmlReader.read(inputStream);
log.info("Parsing XML Response");
weather.setCity(doc.valueOf("/rss/channel/y:location/@city"));
weather.setRegion(doc.valueOf("/rss/channel/y:location/@region"));
weather.setCountry(doc.valueOf("/rss/channel/y:location/@country"));
weather.setCondition(doc.valueOf("/rss/channel/item/y:condition/@text"));
weather.setTemp(doc.valueOf("/rss/channel/item/y:condition/@temp"));
weather.setChill(doc.valueOf("/rss/channel/y:wind/@chill"));
weather.setHumidity(doc.valueOf("/rss/channel/y:atmosphere/@humidity"));
return weather;
}
private SAXReader createXmlReader(){
Map<String,String> uris = new HashMap<String,String>();
uris.put("y", "http://xml.weather.yahoo.com/ns/rss/1.0");
DocumentFactory factory = new DocumentFactory();
factory.setXPathNamespaceURIs(uris);
SAXReader xmlReader = new SAXReader();
xmlReader.setDocumentFactory(factory);
return xmlReader;
}
}
WeatherFormatter.java:接收weather对象,根据Velocity模板生成结果
package org.sonatype.mavenbook.weather;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import org.apache.log4j.Logger;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class WeatherFormatter{
private static Logger log = Logger.getLogger(WeatherFormatter.class);
public String format(Weather weather) throws Exception{
log.info("formatting weather data");
Reader reader = new InputStreamReader(
getClass().getClassLoader().getResourceAsStream("output.vm"));
VelocityContext context = new VelocityContext();
context.put("weather", weather);
StringWriter writer = new StringWriter();
Velocity.evaluate(context, writer, "", reader);
return writer.toString();
}
}
6.添加配置信息
在src/main下建立resources目录,在里面建立log4j.properties和output.vm两个文件
log4j.properties
log4j.rootCategory=INFO,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p %c{1} %x - %m%n
output.vm
***********************************
Current Weather Conditions for:
${weather.city},${weather.region},${weather.country}
Temperature:${weather.temp}
Condition:${weather.condition}
Humidity:${weather.humidity}
Wind Chill:${weather.chill}
***********************************
7.运行
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main
运行结果
- 大小: 114.4 KB
- 大小: 105.3 KB
分享到:
相关推荐
【标题】"myMaven实例"是一个关于使用Maven构建项目的实际示例。Maven是Apache软件基金会开发的一款项目管理和综合工具,它基于项目对象模型(Project Object Model, POM),能够帮助Java开发者管理和构建他们的项目...
在"maven实例应用(基于ssm框架)"这个项目中,Maven扮演着关键角色,它将SSM组件集成到一个可运行的应用程序中。Maven通过在`pom.xml`文件中声明依赖,使得所有必要的库自动下载并组织到项目的类路径中。这极大简化...
【标题】"CXF Spring Maven 实例"是一个关于如何整合并使用这些技术创建Web服务的教程。CXF是一个开源框架,主要用于构建和部署SOAP和RESTful Web服务,Spring则是一个广泛应用的Java企业级开发框架,而Maven是项目...
通过这个SSM+Maven实例,你可以学习到如何将这些组件组合起来,构建一个完整的JavaEE项目,理解各部分的作用,以及如何进行实际的开发和调试工作。这不仅有助于提升个人技能,也为团队协作和项目管理打下坚实基础。
结合这三个技术,"springmvc_hibernate maven实例"可能是一个完整的Java Web项目示例,它演示了如何整合SpringMVC、Hibernate和Maven进行开发。项目中,SpringMVC负责处理HTTP请求和控制流程,Hibernate负责数据持久...
在本项目中,"springboot+maven实例" 是一个基于Spring Boot和Maven技术栈的实战应用,旨在演示如何利用Java Persistence API (JPA) 实现数据持久化。Spring Boot简化了Spring应用的初始搭建以及配置过程,而Maven则...
Spring Redis Maven实例是一个非常实用的学习资源,特别适合那些想要了解如何在Java应用中集成和使用Redis作为缓存或数据存储的初学者。Redis是一个高性能的键值存储系统,而Spring框架则是Java开发中的常用工具,...
总的来说,"Springboot 多模块 maven 配置实例"旨在展示如何在Spring Boot项目中通过Maven进行模块化的管理,提高项目的可维护性和可扩展性。通过这样的方式,我们可以更好地组织代码,使得大型项目更加有序,同时也...
**Spring Security新手入门级Maven实例详解** Spring Security是一个强大且高度可定制的身份验证和访问控制框架,用于Java和Java EE应用。它为应用程序提供了全面的安全解决方案,包括用户认证、授权以及安全配置。...
**Spring MVC HelloWorld Maven实例** Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的模型-视图-控制器(MVC)架构。在这个实例中,我们将深入理解如何使用Maven构建一个基本的“Hello, World!”...
在这个“quartz spring maven 实例”中,我们主要探讨如何在基于 Maven 的 Java 项目中集成 Quartz 和 Spring,以实现高效、灵活的定时任务调度。 首先,我们需要在项目的 `pom.xml` 文件中添加 Quartz 和 Spring ...
基于spark的scala maven实例项目两个简单的统计实例,适合初学者了解。 /** * 第一步:创建Spark的配置对象SparkConf,设置Spark程序的运行时的配置信息, * 例如说通过setMaster来设置程序要链接的Spark集群的...
【标题】"SpringMVC+MyBatis+Maven实例可运行带数据库脚本"是一个典型的Java Web项目架构,它整合了三个主流的开源框架,为开发者提供了快速开发Web应用的解决方案。 【SpringMVC】是Spring框架的一部分,主要用于...
mybatis+spring+struts+maven实例.
Gradle插件,创建一个UploadArchives任务,自动将所有Java、Kotlin或Android库上载到任何Maven实例。这个插件基于chris-banes的初始实现,并且已经被增强以添加kotlin支持并跟上最新的更改。
【标题】"csf maven 实例"涉及的是在Java开发中使用Maven构建CXF Web服务的过程。CXF是一个开源服务框架,它允许开发者创建和部署SOAP和RESTful Web服务,而Maven则是一个项目管理和综合工具,帮助开发者管理项目...
在这个“rabbitMQ Maven实例”中,我们将深入探讨如何使用Maven集成RabbitMQ到Java应用中。 首先,我们需要在`pom.xml`文件中添加RabbitMQ的客户端依赖。RabbitMQ提供了Java API,通过这个API我们可以创建连接、...
这个实例结合SpringMVC、JPA和Maven,为开发者提供了一个完整的Web应用程序开发基础。通过实际操作,你可以学习到如何配置SpringMVC的DispatcherServlet、处理HTTP请求,理解如何使用JPA进行数据库操作,以及如何在...
这是Dubbo的例子,附件里面包括dubboDemoProvide和dubboDemoConsumer工程,此工程师maven工程,自动下载依赖的包,用eclipse导入即可运行,当然,前提是启动了zookeeper-3.4.5,至于如何启动zookeeper网上查资料。
在这个"HelloWorld"实例中,我们将深入探讨如何使用Spring 5.0 MVC和Maven构建一个基本的应用程序。 首先,让我们了解Spring MVC的核心组件: 1. **DispatcherServlet**:它是Spring MVC的前端控制器,负责接收...