我们要看的第一个子模块是simple-weather
子模块。这个子模块包含了所有用来与Yahoo!
weather信息源交互的类。
Example 6.2. simple-weather 模块的 POM
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.sonatype.mavenbook.ch06</groupId> <artifactId>simple-parent</artifactId> <version>1.0</version> </parent> <artifactId>simple-weather</artifactId> <packaging>jar</packaging> <name>Chapter 6 Simple Weather API</name> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> </plugins> </pluginManagement> </build> <dependencies> <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> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> <scope>test</scope> </dependency> </dependencies> </project>
在simple-weather
的pom.xml
文件中我们看到该模块使用一组Maven坐标引用了一个父POM。simple-weather
的父POM通过一个值为org.sonatype.mavenbook
的groupId
,一个值为simple-parent
的artifactId
,以及一个值为1.0
的version
来定义。注意子模块中我们不再需要重新定义groupId和version,它们都从父项目继承了。
Example 6.3. WeatherService 类
package org.sonatype.mavenbook.weather; import java.io.InputStream; public class WeatherService { public WeatherService() {} public String retrieveForecast( String zip ) throws Exception { // Retrieve Data InputStream dataIn = new YahooRetriever().retrieve( zip ); // Parse Data Weather weather = new YahooParser().parse( dataIn ); // Format (Print) Data return new WeatherFormatter().format( weather ); } }
WeatherService
类在src/main/java/org/sonatype/mavenbook/weather
中定义,它简单的调用???中定义的三个对象。在本章的样例中,我们正创建一个单独的项目,它包含了将会在web应用项目中被引用的service对象。这是一个在企业级Java开发中常见的模型,通常一个复杂的应用包含了不止一个的简单web应用。你可能拥有一个企业应用,它包含了多个web应用,以及一些命令行应用。通常你会想要重构那些通用的逻辑至一个service类,以被很多项目重用。这就是我们创建WeatherService
类的理由,在此之后,你就能看到simple-webapp
项目是如何引用在simple-weather
中定义的service对象。
retrieveForecast()
方法接受一个包含邮政编码的String
。之后这个邮政编码参数被传给YahooRetriever
的retrieve()
方法,后者从Yahoo!
Weather获取XML。从YahooRetriever
返回的XML被传给YahooParser
的parse()
方法,后者继而又返回一个Weather
对象。之后这个Weather
对象被WeatherFormatter
格式化成一个像样的String
。