![apache mavenMaven權(quán)威指南是一本關(guān)于ApacheMaven書_第1頁](http://file4.renrendoc.com/view/6a4cd9e968666f83b80147bb95f1fc5b/6a4cd9e968666f83b80147bb95f1fc5b1.gif)
![apache mavenMaven權(quán)威指南是一本關(guān)于ApacheMaven書_第2頁](http://file4.renrendoc.com/view/6a4cd9e968666f83b80147bb95f1fc5b/6a4cd9e968666f83b80147bb95f1fc5b2.gif)
![apache mavenMaven權(quán)威指南是一本關(guān)于ApacheMaven書_第3頁](http://file4.renrendoc.com/view/6a4cd9e968666f83b80147bb95f1fc5b/6a4cd9e968666f83b80147bb95f1fc5b3.gif)
![apache mavenMaven權(quán)威指南是一本關(guān)于ApacheMaven書_第4頁](http://file4.renrendoc.com/view/6a4cd9e968666f83b80147bb95f1fc5b/6a4cd9e968666f83b80147bb95f1fc5b4.gif)
![apache mavenMaven權(quán)威指南是一本關(guān)于ApacheMaven書_第5頁](http://file4.renrendoc.com/view/6a4cd9e968666f83b80147bb95f1fc5b/6a4cd9e968666f83b80147bb95f1fc5b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Maven指TimO'Brien(Sonatype,Inc.),JohnCasey(Sonatype,Inc.),BrianFox(Sonatype,Inc.),BruceSnyder(),JasonVanZyl(Sonatype,Inc.),JuvenXu()CreativeCommonsBY-ND-NCForeword:Beta0.16HowtoUsethisYourFontMavenWritingApache在MacOSX上安裝在Windows上安裝3.1.1.本章的例Maven(Pluginsand(SiteGenerationand4.1.1.本章樣Yahoo!WeatherMavenExec5.1.1.本章樣6.1.1.本章樣7.1.1.本章樣LATESTRELEASE屬性多模塊vsMavenProcessProcessTestTest構(gòu)建激活外部Settings全局SettingsMavenAssemblyPredefinedAssemblyBuildinganAssembliesasAssemblingAssembliesviaAssemblyOverviewoftheAssemblyTheAssemblyPropertyReferencesinAssemblyRequiredAssemblyControllingtheContentsofanFilesFileSetsDefaultExclusionPatternsforCustomizingDependencyOutputInterpolationofPropertiesinDependencyOutputIncludingandExcludingDependenciesbyFineTuning:DependencyIncludesandTransitiveDependencies,Project ents,andProjectAdvancedUnpackingSummarizingDependencymoduleSetsModuleSourcesInterpolationofoutputDirectoryMapinBinariesmoduleSets,ParentPOMsandthebinariesRepositoriesManagingtheAssembly’sRootcomponentDescriptorsandBestStandard,ReusableAssembly:m2eclipseAspectJToolsPlatformWebToolsPlatformMavenSCMMaven創(chuàng)建一個(gè)MavenMavenJavaMaven站 結(jié) 模創(chuàng)建自定義的安裝從Sonatype使用配置.定務(wù)器配部署第構(gòu)WritingWhatisInversionofIntroductiontoWhyWhatisaPluginTop-levelPluginDescriptorMojoPluginWritingaCustomCreatingaPluginASimpleJavaConfiguringaPluginLoggingfromaMojoClassWhenaMojoMojoSupplyingValuesforMojoMulti-valuedMojoDependingonPlexusMojoParameterPluginsandtheMavenExecutingaParallelCreatingaCustomOverridingtheDefaultWritingPluginsinAlternativeWritingPluginsinCreatinganAntWritingPluginsinCreatingaJRubyRubyMojoLoggingfromaRubyRaisingaReferencingPlexusComponentsfromWritingPluginsinCreatingaGroovyAppendix:SettingsQuickSettingsSimplePluginActiveAppendix:SunSpecificationListofsimple-weather和simple-persist令行應(yīng)用maven-bookvs企業(yè)級(jí)多模塊vsAssemblyDescriptorMaterializingaMaven具體化Apache 16.2.用戶的Nexus界ListofDom4JJaxenVelocityLog4JSimpleWeatherWeatherSimpleWeatherMainSimpleWeatherYahooRetrieverSimpleWeatherYahooParserSimpleWeatherWeatherFormatterSimpleWeatherLog4JSimpleWeatherOutputVelocitySimpleWeatherYahooParserTestXMLMavenJettyJSP2.0WeatherServiceWeatherServicesimple-persistSpringApplicationmandmandMainweather.vmVelocityhistory.vmVelocitymand指定一個(gè)依賴界限:JUnit3.8JUnit指定一個(gè)依賴界限:JUnit為AdobeFlexSWF)過濾資 定義用戶特定的SettingProfile~定義激活的Settings/AssemblyDescriptorforExecutableConfiguringtheprojectassemblyintop-levelActivatingtheAssemblyPluginConfigurationinChildPOMfortheAssemblyBundlingRequiredAssemblyDescriptorIncludingaJARfileinanAssemblyusingIncludingFileswithDefinitionofDefaultExclusionPatternsfromPlexusDefiningDependencySetsUsingUsingDependencyExcludesandIncludesinExcludingFilesfromaDependencyIncludesandExcludingModuleswithaIncludingJavaDocfromModulesinanIncludingModuleArtifactsandDependenciesinan在資源中Maven屬 為Nexus配置MavenSettings~OracleJDBCJARPluginAPluginProject'sASimpleMavenMetadatafortheMavenPluginCustomizingthePluginGroupsinMavenConfiguringaPluginAPluginwithMulti-valuedDependingonaPlexusDefineaCustomLifecycleinForkingaCustomerLifecyclefromaOverridingtheDefaultConfiguringaPluginasanPOMforanAntMavenEchoAntEchoAntMojoPOMforaJRubyMavenTheEchoRubyReferencingaMavenProjectfromaRubyRaisingaMojoErrorfromaRubyDependingonaPlexusComponentfromaRubyPOMforaGroovyMavenPluginOverviewoftop-levelelementsinSimpletop-levelelementsinServerconfigurationinMirrorconfigurationinProxyconfigurationinDefiningActivationParametersinSettingthe${user.install}propertyinRepositoryConfigurationinSettingactiveprofilesinAddingJTA1.0.1BtoaMavenChapter1介紹ApacheMavenMaven...它是什么像Ant這樣的構(gòu)建工具僅僅是關(guān)注預(yù)處理,編譯,打包,測(cè)試和分發(fā)。像Maven一個(gè)更正式的ApacheMavenMaven是一個(gè)項(xiàng)目管理工具,它包含了一個(gè)項(xiàng)目對(duì)象模型(ProjectObjectModel),一組標(biāo)準(zhǔn)集合,一個(gè)項(xiàng)目生命周期(ProjectMaven來構(gòu)建和分發(fā)你的項(xiàng)目。約定優(yōu)于配置(ConventionOverRubyonRailsEJB3已經(jīng)開始堅(jiān)持這些原則,以對(duì)像原始的EJB2.1EJB3持久化,將一個(gè)特殊的Bean@Entity。${basedir}/src/test。項(xiàng)目假定會(huì)產(chǎn)生一個(gè)JAR文件。${basedir}/target創(chuàng)建一個(gè)可分發(fā)的JAR 。 位置 當(dāng)然Maven有一些觀點(diǎn)不應(yīng)該被懷疑,但是其實(shí)很多默認(rèn)行為還是可配置的。Maven也會(huì)允許你自定義默認(rèn)值來適應(yīng)你的需求。在2001年,構(gòu)建一個(gè)項(xiàng)目如TurbineTomcat,兩者方法是完全不同的。如果一個(gè)新的進(jìn)行靜態(tài)源碼分析的源碼分析工具面世了,或者爭(zhēng)論所描述刻畫。Maven之前的時(shí)代是低效率的時(shí)代,是“構(gòu)建工程師”的時(shí)代。ServiceMix,然后從源碼進(jìn)行構(gòu)建,你需要為每個(gè)項(xiàng)目留出一個(gè)小時(shí)來理解給它的構(gòu)建系統(tǒng)。這個(gè)mvninstallMaven有很多優(yōu)點(diǎn),包括依賴管理和通過插件重用一般的構(gòu)建邏輯,但它成功的最原因是它定義了構(gòu)建軟件的一般的接口。每當(dāng)你看到一個(gè)使用MavenApache基于MavenMaven的其實(shí)不做什么實(shí)際的事情,除了解析一些文檔,管理生命周期與插件之外,它什么也不懂。MavenMaven插件,這些插件可以影響Maven生命周期,提供對(duì)目標(biāo)的。絕大多數(shù)Maven的動(dòng)作發(fā)生于MavenApacheMaven不知道如何打包WAR安裝運(yùn)行諸如mvninstall命令的時(shí)候,它會(huì)從Maven倉(cāng)庫大部分插件。這不僅僅是一個(gè)最小化從倉(cāng)庫獲取依賴和插件的這一事實(shí)允許了構(gòu)建邏輯的全局性重用。MavenSurefire1.0發(fā)展到目前廣泛使用的在Surefire插件編譯運(yùn)行你的JUnit3單元測(cè)試,然后你升級(jí)到了版本的運(yùn)行單元測(cè)試,那么感謝Surefire插件的者,你已經(jīng)可以使用了。你也能運(yùn)行支持注解的JUnit4單元測(cè)試。不用升級(jí)這種機(jī)制不僅僅適用于Surefire插件,項(xiàng)目使用Compiler插件進(jìn)行編譯,通過Jar插件變成文件,還有一些插件生成報(bào)告,運(yùn)行JRubyMaven插件獲益,這些插件有人,可以從倉(cāng)庫到。這就是基于Maven插件的全局性重用一個(gè)“項(xiàng)目”為項(xiàng)目指定一組唯一的坐標(biāo)。你要描述項(xiàng)目的的屬性。項(xiàng)目的僅是一個(gè)“構(gòu)建工具”,它不僅僅是在類似于makeAnt用這些坐標(biāo)來依賴。IDEMaven是Ant當(dāng)然,MavenAnt的另一種選擇,但是Apache構(gòu)建的者,而你很容易的在你項(xiàng)目的Maven構(gòu)建中集成Ant構(gòu)建。這是不僅僅是一個(gè)工具,它更是一個(gè)平臺(tái),當(dāng)你只是將MavenAnt有一個(gè)觀點(diǎn)使得所有的關(guān)于Maven和.Ant,Maven和Buildr,Maven和 涉及的比構(gòu)建工具本身多得多。當(dāng)本書討論Maven的時(shí)候,它也設(shè)計(jì)到支持的軟件,系統(tǒng)和標(biāo)準(zhǔn)。Buildr,Ivy,Gradle,所有這些工具都和太大關(guān)系。“誰是勝利者?Ant還是構(gòu)建的基本技術(shù),MavenAnt的更好選擇;同時(shí),Maven的邊界在持續(xù)的移動(dòng),Maven的財(cái)產(chǎn)是性構(gòu)建,依賴管理,倉(cāng)庫管理,基于插件的高度和重用,但是當(dāng)前,和開源社區(qū)比較Maven和copyjavacjar任務(wù)。在你使用Ant的時(shí)候,你為Example1.1Antbuild.xml<projectname="my-project"default="dist"simpleexamplebuild<!--setglobalpropertiesforthisbuild--<propertyname="src"<propertyname="build"<propertyname="dist"<target<!--Createthetimestamp--<!--Createthebuilddirectorystructureusedbycompile--<mkdir<targetname="compile"depends="init"description="compilethesource"><!--Compilethejavacodefrom${src}into${build}--<javacsrcdir="${src}"<targetname="dist"depends="compile"description="generatethedistribution"><!--Createthedistributiondirectory--<mkdir<!--Puteverythingin${build}intotheMyProject-${DSTAMP}.jarfile--><jarjarfile="${dist}/lib/MyProject-${DSTAMP}.jar"<targetname="clean"description="cleanup"><!--Deletethe${build}and${dist}directorytrees--<delete<delete在這個(gè)簡(jiǎn)單的AntAnt。你必須明確告訴Ant減少程序,但一個(gè)開發(fā)者對(duì)AntMavenAnt樣例做個(gè)比較。在Maven中,要從Java源碼創(chuàng)建一個(gè)${basedir}/src/main/javamvninstall。下面的樣例MavenExample1.2MavenJAR,然后把這個(gè) 找到一個(gè)index.html文件,這個(gè)文件了JAR的項(xiàng)目。一個(gè)遵循Mavenpom.xmlMavenPOM項(xiàng)目的構(gòu)建文件的信息是完全不同的。MavenPOM包含:“這是一個(gè)JAR項(xiàng)目”,“源代碼在 ”。Ant構(gòu)建文件包含顯式的指令:“這是一個(gè)項(xiàng)目”,“源代碼在src/main/java”,“針對(duì)這個(gè) 運(yùn)行javac”,“把結(jié)果放到target/classes”,“從……創(chuàng)建一個(gè)JAR,等等。AntAntMaven的區(qū)別是:Apache 結(jié)構(gòu),你必須明確的告訴Apachetarget/classestarget生成一個(gè)JAR Mavenmvninstall的時(shí)候被調(diào)用。這條命令告訴Maven運(yùn)行了許多默認(rèn)的插件目標(biāo),這些目標(biāo)完成了像編譯和創(chuàng)建一個(gè)${basedir}/src/test/java,添加一個(gè)對(duì)于TestNGJUnitJAR,你需要做的是改變你的項(xiàng)目類型為war,然后文檔 ${basedir}/src/main/webapp。當(dāng)然,你可以用做這些事情,但是你將需要從零開始寫這些指令。使用Ant,你首先需要確定JUnit文件應(yīng)該放在哪里,然后你需要?jiǎng)?chuàng)建一個(gè)包含這個(gè)JUnitJAR文件的classpath,然后告訴MavenPOM,相對(duì)于XML。Maven的另一個(gè)優(yōu)點(diǎn)是它依靠廣泛公用的些Ant通過一種明確的方法完成一個(gè)明確的過程,而這種過程不適合Maven標(biāo)準(zhǔn),你仍然可以在Maven中用這些。作為一個(gè)Maven的插件,還是可用的。自定義的插件可以用Ant來實(shí)現(xiàn),Maven項(xiàng)目可以配置成在生命周期中運(yùn)行的總MavenChapter2.安裝和運(yùn)行.2.2.在MacOSX上安裝 驗(yàn)證你的Java%java-javaversionJava(TM)SERuntimeEnvironment(build1.6.0_02-JavaHotSpot(TM)ClientVM(build1.6.0_02-b06,mixedmode,試的。如果你正在使用Linux,你可能需要自己Sun的JDK,并且確定JDK的版本(運(yùn)行java-當(dāng)你Maven的時(shí)候,確認(rèn)你選擇了版本的ApacheMaven。本書書寫的時(shí)候版本是Maven2.0.9。如果你不熟悉Apache軟件證,你需要在使用產(chǎn)品之前去熟悉該證的條款。的關(guān)于Apache軟件證的信息可以Section2.8,“關(guān)于Apache軟件證”找到。安裝在MacOSX上安裝2.0.9;你可能會(huì)需要?jiǎng)?chuàng)建一個(gè)符號(hào),那樣就能更容易使用,當(dāng)你升級(jí)Maven的時(shí)候也不再需要/usr/local%ln-smaven-2.0.9/usr/local%export/usr/local%export ven2.0.9,因?yàn)殡S著Maven2.0.9的發(fā)布很多bug被修正了,還有很多改進(jìn)。exportM2_HOME=/usr/local/mavenexportPATH=${M2_HOME}/bin:${PATH} c:\ProgramFiles\maven-2.0.9,但是,只要你設(shè)置的正確的環(huán)境變量,把Maven安裝到其它 C:\Users\tobrien>setM2_HOME=c:\ProgramFiles\maven-C:\Users\tobrien>set,“遵循Section2.3.1在驗(yàn)證Maven當(dāng)Mavenmvn$mvn-MavenMaven/usr/local/maven$ls-LICENSE.txt包含了ApacheMaven的軟件 證。Section2.8, 是你本地的倉(cāng)庫。當(dāng)你從Maven倉(cāng)庫依賴的時(shí)候,Maven在你本地倉(cāng)庫 s上,我們?nèi)匀皇褂脋來表示你的home 。在WindowsXP上,你的home sandSettings\tobrien,在Windows 升級(jí)cton..,“在c上安裝avn”和cton..,“Linu上安裝aen,在c或者nixaveaenaen(n)aen(n-),然將符n從n9改成如果你在Windows上安裝了Maven,將Mavenc:\ProgramFiles\maven-獲得Maven雖然本書的目的是作為一本全面的參考手冊(cè),但是仍然會(huì)有一些我們會(huì)不遺漏,一些特殊情你個(gè)自定義的搜索框,以用來搜索已有的Maven站點(diǎn)MavenUserMailing f178html。你也可以按照這里的指令來加入用戶郵件列表:listshtml。
使用MavenHelp目標(biāo)。MavenHelp插件能讓你列出活動(dòng)的MavenProfile,顯示一個(gè)實(shí)際POM(effectivePOM),打印實(shí)際settings(effectivesettings),或者列出Maven插件的屬性?!? 最后一個(gè)目標(biāo)describe——相對(duì)比較復(fù)雜,展示某個(gè)插件或者插件目標(biāo)的相關(guān)信息。, help:describeplugin參數(shù)你可以指定你想要研究哪個(gè)插件,你可以傳入插件的前綴(helpmaven-help-plugin),groupId:artifact[:versionversion是可選的。比如,下面令使用help插件的describe目標(biāo)來輸出MavenHelp插件的信息$mvnhelp:describe-GroupId:org.apache.maven.pluginsArtifactId:maven-help-plugin GoalPrefix:helpTheMavenHelppluginprovidesgoalsaimedatheltomakesenseoutthebuildenvironment.ItincludestheabilitytoviewtheeffectivePOMandsettingsfiles,afterinheritanceandactiveprofileshavebeenapplied,aswellasadescribeaparticularplugingoaltousage助,你通常還是需要了解的詳情。如果你想要Help$mvnhelp:describe-Dplugin=help-GroupId:org.apache.maven.pluginsArtifactId:maven-help-plugin GoalPrefix:helpTheMavenHelppluginprovidesgoalsaimedatheltomakesenseoutthebuildenvironment.ItincludestheabilitytoviewtheeffectivePOMandsettingsfiles,afterinheritanceandactiveprofileshavebeenapplied,aswellasadescribeaparticularplugingoaltogiveusageGoal:'active-ListstheprofileswhicharecurrentlyactiveforthisImplementation:org.apache.maven.plugins.help.ActiveProfilesMojoLanguage:javaName:outputType:java.io.FileRequired:falseDirectlyeditable:trueThisisanoptionalparameterforafiledestinationfortheoutputofthismojo...thelistingofactiveprofilesperName:projectsType:java.util.ListRequired:trueDirectlyeditable:falseThisisthelistofprojectscurrentlyslatedtobebuiltbyThismojodoesn'thaveanycomponent...removedtheothergoals取單個(gè)目標(biāo)的信息,設(shè)置mojo參數(shù)和plugin參數(shù)。下面令列出了Compiler插件的compile目標(biāo)的所有信息$mvn pile-關(guān)于Apache軟件。 它允許?自由的和使用Apache軟件,無論是軟件的整體還是部分,在你創(chuàng)建的類庫或分發(fā)版本里使用Apache 軟 軟 它要求在你重新分發(fā)的包含Apache軟件的軟件里,包含一份該證的副本對(duì)于任何包含Apache它不要求你提交你對(duì)軟件的改動(dòng)至Apache軟件(雖然我們鼓勵(lì)這種反饋)PartIMaven實(shí)的參考書,或者“動(dòng)物”書,提供全面的材料,覆蓋了整個(gè)的課題。兩種書都有優(yōu)缺點(diǎn),因此只不同的想法:數(shù)百的的開發(fā)人員有著不同的書寫風(fēng)格,語氣以其方言。除去很多好心的所做本書想要改變這種情況,通過提供,第一:在PartI,“習(xí)Maven的很有價(jià)值的材料。在本書的第一部分中我們“邊做邊介紹”,然后在PartII,“MavenReference”中我們填充空白,鉆研細(xì)節(jié),介紹那些Maven新手不感的高級(jí)話題。PartII,“MavenReference”可能使用與樣例項(xiàng)目無關(guān)的一個(gè)參考列表和一程序列表,而PartI,插件來開始自定義你的項(xiàng)目,或者想了解特定插件細(xì)節(jié)的時(shí)候,才可能需要回到PartII,“MavenTableof3.1.1.本章的例Maven(Pluginsand(SiteGenerationand4.1.1.本章樣Yahoo!WeatherMavenExec5.1.1.本章樣6.1.1.本章樣7.1.1.本章樣Chapter3.一個(gè)簡(jiǎn)單的Maven3.1.1.本章的例Maven(Pluginsand(SiteGenerationand簡(jiǎn)在后介紹一些使Maven成為一個(gè)可靠的構(gòu)建平臺(tái)的概念。讀完本章后,你將會(huì)對(duì)構(gòu)建生命周期(buildlifecycle),Maven(repositories)(dependencymanagement)和項(xiàng)目對(duì)象模型(ProjectObjectModel)有一個(gè)基本的理解。3.1.1.本章的例,你應(yīng)該不需要這些例子來重新創(chuàng)建那些Maven已經(jīng)生成好的代碼。會(huì)使用Maven $mvnarchetype:create-DgroupId=org.sonatype.mavenbook.ch03-DartifactId=simple[INFO]Scanningfor[INFO]Searchingrepositoryforpluginwithprefix:'archetype'.[INFO]artifactorg.apache.maven.plugins:maven-archetype-plugin:checkingfor\updatesfromcentral[INFO]BuildingMavenDefault task-segment:[archetype:create](aggregator-style)[INFO][INFO]artifactorg.apache.maven.archetypes:maven-archetype-\checkingforupdatesfrom[INFO]Parameter:groupId,Value:org.sonatype.mavenbook.ch03[INFO]Parameter:packageName,Value:org.sonatype.mavenbook[INFO]Parameter:basedir,Value:/Users/tobrien/svnw/sonatype/examples[INFO]Parameter:package,Value:org.sonatype.mavenbook[INFO]Parameter:version,Value:1.0-SNAPSHOT[INFO]Parameter:artifactId,Value:simple[INFO]*EndofdebuginfofromresourcesfromgeneratedPOM*[INFO]Archetypecreatedindir:mvn是Maven2令。archetype:create稱為一個(gè)Maven目標(biāo)(goal)。如果你熟悉Apacheofwork)。而像-Dname=value這樣的對(duì)是將會(huì)被傳到目標(biāo)中的參數(shù),它們使用- MavenArchtype插件創(chuàng)建了一個(gè)與artifactId匹配的 我們項(xiàng)目的源碼了資源文件被放在了src/main下面。在我們簡(jiǎn)單Java項(xiàng)目這樣的情況下,這個(gè)包含了一下java類和一些配置文件。在其它的項(xiàng)目中,它可能是web應(yīng)用的文檔根,或者還放一些應(yīng)用服務(wù)器的配置文件。在一個(gè)Java項(xiàng)目中,Java類放在src/mai我們項(xiàng)目的測(cè)試用例放在src/test下。在這個(gè)下面,src/test/java存放像使用JUnit或者TestNG這樣的Java測(cè)試類。src/test/resources下存放測(cè)試classpath資源文package*o*publicclass{publicstaticvoidmain(String[]args{System.out.println( oWorld!"}} ,“ 下運(yùn)行mvninstall。$mvn[INFO]Scanningforprojects...[INFO]Building task-segment:[install][INFO][INFO]Usingdefaultencodingtocopyfiltered[INFO] [INFO]Compiling1sourcefileto/simple/target/classes[INFO][resources:testResources][INFO]Usingdefaultencodingtocopyfilteredresources.[INFO][ [INFO]Compiling1sourcefileto/simple/target/test-classes[INFO][surefire:test][INFO]Surefirereportdirectory:/simple/target/surefire-TESTRunningTestsrun:1,Failures:0,Errors:0,Skipped:0,Timeelapsed:0.105ResultsTestsrun:1,Failures:0,Errors:0,Skipped:0[INFO][jar:jar][INFO]Buildingjar:/simple/target/simple-1.0-SNAPSHOT.jar[INFO][install:install][INFO]Installing/simple/target/simple-1.0-SNAPSHOT.jarto~/.m2/repository/org/sonatype/mavenbook/ch03/simple/1.0-SNAPSHOT/\$java-cptarget/simple-1.0-SNAPSHOT.jaro(ProjectObjectavenArchetype插件的create目標(biāo)創(chuàng)建的默認(rèn)的pom.xml文件。Example3.1Simplepom.xml<project<project"packaging,version——是avn(cordnae)和是ebepndeces(tet- 下跑下面令$mvnhelp:effective-概 ?什么是生命周期?什么是“本地倉(cāng)庫”?下面的小結(jié)闡述了一些Maven的概念Maven(Pluginsand$mvnarchetype:create-DgroupId=org.sonatype.mavenbook.ch03-DartifactId=simple[INFO][INFO]artifactorg.apache.maven.archetypes:maven-archetype-\checkingforupdatesfrom的插件可以用Java編寫,或者用一些其它的語言如Ant,Groovy,beans Figure3.1.目標(biāo)一起運(yùn)行。一個(gè)目標(biāo)是Maven中的一個(gè)“工作單元(unitofwork)”。目標(biāo)的例子包括插件中的pile目標(biāo),它用來編譯項(xiàng)目中的所有源文件,或者例如,插件的pile目標(biāo)定義了一組配置參數(shù),它們?cè)试S你設(shè)置目標(biāo)JDK版本或者選擇一個(gè)artifactId。這是我們對(duì)于約定優(yōu)于配置(conventionoverarcetpecetye得多但是是一快速始新目的錯(cuò)方法。本書后面會(huì)讓看到chtypebcetye 給了Maven插件,像Compiler插件和Jar插件,它們?cè)谛枰臅r(shí)候被 你Maven的時(shí)候,你得到的是一個(gè)包含了基本軀殼的Maven,它知道如何解析命令行,管件,在需要的時(shí)候插件。通過保 果你不喜歡這個(gè)Compiler插件,你可以用你的實(shí)現(xiàn)來覆蓋它)。一個(gè)WAR文件。Figure3.2,Figure3.2.Figure3.3. 。 Figure3.4.mvnresources:resourcespile\resources:testResources\pilesurefire:test\項(xiàng)目的性描述。當(dāng)Maven運(yùn)行一個(gè)目標(biāo)的時(shí)候,每個(gè)目標(biāo)都會(huì)定義在項(xiàng)目POM里的信息。 來找出這個(gè)文件的名字。當(dāng)?shù)?。POM為項(xiàng)目命名,提供了項(xiàng)目的一組唯一標(biāo)識(shí)符(坐標(biāo))(dependencies,父(parents)(prerequisite)Figure3.5.一個(gè)Maven,件或者父項(xiàng)目和另外一個(gè)項(xiàng)目關(guān)聯(lián)的時(shí)候,Maven通過坐標(biāo)來精確定位一個(gè)項(xiàng)目。Maven坐標(biāo)d 樣的groupId,artifactId和version標(biāo)識(shí)的項(xiàng)目。在Figure3.6.Maven當(dāng)你第一次運(yùn)行Maven的時(shí)候,你會(huì)注意到Maven從一個(gè)的Maven倉(cāng)庫了許多文件。如果這需要的時(shí)候從的倉(cāng)庫取來的。初始的Maven包的大小相當(dāng)?shù)男。?.8兆),其中一個(gè)原因是幾近的最少值,而在需要的時(shí)候再?gòu)膫}(cāng)庫去取。Maven自帶了一個(gè)用來Maven插件和依賴的倉(cāng)庫地址(/maven2)。你是 開瀏覽器,然后瀏覽Maven倉(cāng)庫 倉(cāng)庫構(gòu)件和插件到你本機(jī)上, 然后才是其它地方。在WindowsXP上,你的本地倉(cāng)庫很可能在C:\ sand$mvn[INFO][INFO]Installing.../simple-1.0-SNAPSHOT.jarto~/.m2/repository/org/sonatype/mavenbook/simple/1.0-SNAPSHOT/\程倉(cāng)庫的構(gòu)件的緩存,也允許你的項(xiàng)目相互依賴。depndeces)(pring或者berae)aenaen賴中同時(shí)讓你定義認(rèn)行,者排除些特的傳性依。 ,還有ve用來證已構(gòu)準(zhǔn)確校驗(yàn)和件。要注的是ave不只下載JitJ文件它同為這Jit賴了一文件。aen時(shí)構(gòu)件和文aen當(dāng)你把目的件安到本倉(cāng)庫,你發(fā)現(xiàn)JR文件一 下,ve發(fā)布一個(gè)微修改過的的版。件在庫里給其它目了項(xiàng)目信息其中重要的就是有哪依賴如果目賴于目,么也依賴項(xiàng)目依賴當(dāng)aen過一組ave坐標(biāo)處理賴構(gòu)的時(shí),它會(huì)獲取通依賴的尋找遞性賴。些傳性依賴會(huì)被加到前項(xiàng)的依列表。在Maven中一個(gè)依賴不僅僅是一個(gè)JAR。它是一個(gè)POM文件,這個(gè)POM可能也了對(duì)其它構(gòu)件的依賴。這些依賴的依賴叫做傳遞性依賴,Maven倉(cāng)庫不僅僅存貯二進(jìn)制文件,也了這些構(gòu)建的Figure3.7.MavenHibernate,ApacheStrutsSpring范圍是test。當(dāng)一個(gè)依賴的范圍是test的時(shí)候,說明它在插件運(yùn)行pile目標(biāo)的時(shí)候 編譯的時(shí)候需要,但是它不應(yīng)該被在構(gòu)建的輸出中。當(dāng)你開發(fā)web應(yīng)用的時(shí)候provided范圍變得十分有用,你需要通過ServletAPI來編譯你的代碼,但是你不希望Servlet 中(SiteGenerationand $mvn 。TML源代碼相互間,這在代碼的時(shí)候非常有用,PMD報(bào)告針對(duì)各種編碼問題來分析源代小我[1]“java-help”查看Java的解釋。Maven的bin Chapter4.定制一個(gè)Maven4.1.1.本章樣Yahoo!WeatherMavenExec介MavenMaven開始創(chuàng)建真正的項(xiàng)目。4.1.1.本章樣本章開發(fā)一個(gè)和Yahoo!Weather服務(wù)交互的實(shí)用程序。雖然沒有樣例源碼你也應(yīng)該能夠理解這個(gè)開發(fā)過程,但還是推薦你本章本章的樣例項(xiàng)目包含在本書的樣例代碼中,你可以從兩個(gè)地方,http: mvn-examples-1.0.zip或者h(yuǎn)ttp: 。在 ,它包含了本章開發(fā)出來的 1.0,然后點(diǎn)擊 定義SimpleWeather在定制本項(xiàng)目之前,讓我們退后一步,討論下這個(gè)simpleweathersimpleMaven特征的樣例。simpleweather是一個(gè)基本令行驅(qū)動(dòng)的應(yīng)用程序,它接受輸入,然后從Yahoo!WeatherRSS首先,它很直觀;用戶通過命令行提供輸入,程序,對(duì)Yahoo!WeatherXML解析和一些日志語句。Velocity,Dom4jLog4jMaven,但我們不會(huì)回避那些介紹有趣工具的機(jī)會(huì)。Yahoo!Weather在開始構(gòu)建這個(gè)應(yīng)用之前,你需要了解一下Yahoo!WeatherYahoo!Weather連接你數(shù)據(jù)源應(yīng)用的權(quán)限?!睋Q句話說,如果你考慮集成該數(shù)據(jù)源到你的商業(yè)本章我們提倡的使用是個(gè)人教育用途。要了解的Yahoo!Weather服務(wù)條款,請(qǐng)參考Yahoo!WeatherAPI文檔:http://d /weather/。創(chuàng)建SimpleWeather首先,讓我們用MavenArchetype插件創(chuàng)建這個(gè)simpleweather項(xiàng)目的基本輪廓。$mvnarchetype:create-DgroupId=org.sonatype.mavenbook.ch04\[INFO]
[INFO]artifactorg.apache.maven.archetypes:maven-archetype-\checkingforupdatesfromcentral[INFO]UsingfollowingparametersforcreatingArchetype:\[INFO]Parameter:groupId,Value:org.sonatype.mavenbook.ch04[INFO]Parameter:packageName,Value:org.sonatype.mavenbook[INFO]Parameter:basedir,Value:~/examples[INFO]Parameter:package,Value:org.sonatype.mavenbook[INFO]Parameter:version,Value:1.0[INFO]Parameter:artifactId,Value:simple-[INFO]***EndofdebuginfofromresourcesfromgeneratedPOM***[INFO]Archetypecreatedindir:~/examples/simple-weather Example4.1simple-wheather<project archetype:createversion1.0-weather1.0版本。XML。Example4.2pom.xml<project <name>Apache <comments>Abusiness-friendlyOSS <name>JasonVan ,“元素的開始后面跟著“…”或者在project元素的結(jié)束前“…”Simpleweather應(yīng)用程序必須要完成以下三個(gè)任務(wù):從Yahoo!WeatherXML引入一些新的依賴。為了解析來自Yahoo!的XML響應(yīng),會(huì)使用Dom4JJaxen,為了格式化這個(gè)命令行程序的輸出,會(huì)使用Velocity,我們還需要加入對(duì)的依賴,用來做日志。加入這些依賴之后,我們的dependenciesExample4.3Dom4JJaxenVelocityLog4J正如你從上面所看到的,我們?cè)诜秶鸀閠est的JUnit依賴基礎(chǔ)上又加了四個(gè)依賴元素。如果你把這些依賴添加到項(xiàng)目的pom.xml文件然后運(yùn)行mvninstall,你會(huì)看到Maven這些依賴及其它傳遞性依賴到你的本地Maven倉(cāng)庫。我們?nèi)绾握疫@些依賴呢?我們都“知道”適當(dāng)?shù)膅roupId和artifactId的值嗎?有些依賴(像Log4J被廣泛使用,以至于每次你需要使用它們的時(shí)候你都會(huì)記得它們的groupId和artifactId。而Velocity,Dom4J和Jaxen是通過一個(gè)十分有用的站點(diǎn)來定位的。該站點(diǎn)提供了針對(duì)Maven倉(cāng)庫的搜索接口,你可以用它來搜索依賴。你可以自己測(cè)試一下,載入然后搜索一些常用的類庫,如Hibernate或者SpringFramework。當(dāng)你在這上面搜索構(gòu)件時(shí),它會(huì)顯示一個(gè)artifactId和所有Maven 所知道的版本。點(diǎn)擊某個(gè)特定的版本后,它會(huì)載入一個(gè)頁面,這個(gè)頁面就包括了你需要 自己項(xiàng)目pom.xml中的依賴元素。你經(jīng)常會(huì)發(fā)現(xiàn)某個(gè)特定的類庫擁有多于一個(gè)的groupId, SimpleWeather命令行應(yīng)用程序包含五個(gè)JavaWeather類是個(gè)很簡(jiǎn)單的JavaYahooParser解析來自YahooWeatherXMLWeathersimple-weather 在src/main/java $cd$rm$cd$cd$rm$mkdir$cd Example4.4SimpleWeatherWeatherpackagepublicclassWeather{privateStringcity;privateStringregion;privateStringcountry;privateStringcondition;privateStringtemp;privateStringchill;privateStringpublicWeather()publicStringgetCity(){returncity;publicvoidsetCity(Stringcity){this.city=city;publicStringgetRegion(){returnregion;publicvoidsetRegion(Stringregion){this.region=region;publicStringgetCountry(){returncountry;publicvoidsetCountry(Stringcountry){this.country=country;publicStringgetCondition(){returncondition;publicvoidsetCondition(Stringcondition){this.condition=condition;}publicStringgetTemp(){returntemp;publicvoidsetTemp(Stringtemp){this.temp=temp;publicStringgetChill(){returnchill;publicvoidsetChill(Stringchill){this.chill=chill;publicStringgetHumidity(){returnhumidity;publicvoidsetHumidity(Stringhumidity){this.humidity=humidity;}Weather類定義了一個(gè)簡(jiǎn)單的bean,用來由Yahoo!Weather 下,創(chuàng)建Main.java文件。Main這個(gè)類有一個(gè)靜態(tài)的main()函數(shù)——Example4.5SimpleWeatherMainpackageimportimportpublicclassMainpublicstaticvoidmain(String[]args)throwsException//Configure//ReadtheZipCodefromtheCommand-line(ifnoned,useintzipcode=tryzipcode=}catch(Exceptione)//Startthenew}privateintpublicMain(intzip)this.zip=}publicvoidstart()throwsException//RetrieveInputStreamdataIn=newYahooRetriever().retrieve(zip//ParseWeatherweather=newYahooParser().parse(dataIn//Format(Print)System.out.print(newWeatherFormatter().format(weather)}}main(函數(shù)通過獲取classpath如果 的時(shí)候拋出了異常,程序會(huì)設(shè)置默認(rèn)為60202一旦有 調(diào)用YahooRetriever來獲取天氣的XML數(shù)據(jù)。YahooRetriever返回一個(gè)InputStreem,傳給YahooParser。YahooParser解析XML數(shù)據(jù)并返回Weather對(duì)象。最后,WeatherFormatter接受一個(gè)Weather對(duì)象并返回一個(gè)格式化的在相 Example4.6SimpleWeatherYahooRetrieverpackageimportimportimport.URLConnection;importorg.apache.log4j.Logger;publicclassYahooRetriever{privatestaticLoggerlog=publicInputStreamretrieve(intzipcode)throwsException{("RetrievingWeatherData");Stringurl= /forecastrss?p="+URLConnectionconn=newreturn}}這個(gè)簡(jiǎn)單的類打開接到Y(jié)ahoo!WeatherAPI的URLConnection并返回一 下創(chuàng)建文件YahooParser.java用以解析這個(gè)數(shù)據(jù)源Example4.7SimpleWeatherYahooParserpackageimportjava.io.InputStream;importjava.util.HashMap;importjava.util.Map;importimport import importpublicclassYahooParserprivatestaticLoggerlog=publicWeatherparse(InputStreaminputStream)throwsException{Weatherweather=newWeather();("CreatingXMLReader");SAXReaderxmlReader=createXmlReader();doc=xmlReader.read(inputStream);("ParsingXMLResponse"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(return}privateSAXReadercreateXmlReader()Map<String,String>uris=newHashMap<String,String>();uris.put("y"," Factoryfactory=new factory.setXPathNamespaceURIs(uris);SAXReaderxmlReader=newSAXReader();xmlReader.setFactory(factory);returnxmlReader;}}YahooParser是本例中最復(fù)雜的類,我們不會(huì)深入Dom4JWeatherDom4J文檔。因?yàn)槲覀儗?duì)Yahoo!WeatherXML命名空間的元素感,我們需要用createXmlReader()方法創(chuàng)建一個(gè)包含命名空間信息的SAXReader。一旦我們創(chuàng)建了這個(gè)reader并且解析了文檔,得到了返回的org.dom4j. ,只需要簡(jiǎn)單的使用XPathJaxen提供了XPath功能。(源碼網(wǎng) Example4.8SimpleWeatherWeatherFormatterpackageimportimportimportimportimportimportpublicclassWeatherFormatterprivatestaticLoggerlog=publicStringformat(Weatherweather)throwsException{("FormattingWeatherData");ReaderreadernewInputStreamReader(VelocityContextcontext=newVelocityContext();context.put("weather",weather);StringWriterwriter=newStringWriter();Velocity.evaluate(context,writer,"",reader);returnwriter.toString();}}WeatherFormatterVeloticy來呈現(xiàn)一個(gè)模板。format(WeatherbeanString。format(方法做的第一件事是從classpath載入名字為output.vmVelocityVelocityContextWeatherVelocity.evaluate(,給模板賦值,結(jié)果作為String在我們能夠運(yùn)行該樣例程序之前,我們需要往classpath本項(xiàng)目依賴于兩個(gè)classpathMainclasspathlog4j.preopertiesLog4J,WeatherFormatter了一個(gè)在classpath中的名為output.vm的模板。這兩個(gè)資源都需要在默認(rèn)包中(或者classpath的 $cd$mkdir$cd Example4.9.SimpleWeatherLog4J#SetrootcategoryprioritytoINFOanditsonlyappendertoCONSOLE.log4j.rootCategory=INFO,CONSOLE#CONSOLEissettobeaConsoleAppenderusingaPatternLayout.log4j.appender.CONSOLE.layout.ConversionPattern=%-4r%-5p%c{1}%x-output.vm,它是這個(gè)命令行程序用來呈現(xiàn)輸出的Velocity模板。在 Example4.10SimpleWeatherOutputVelocityCurrentWeatherConditionsfor:${weather.city},${weather.region},Temperature:${weather.temp}Condition:${weather.condition}Humidity:${weather.humidity}WindChill:${weather.chill}運(yùn)行SimpleWeatherCodehausMojo $mvn$mvnexec:java-[INFO] INFOYahooRetriever-RetrievingWeather134INFOYahooParser-CreatingXML333INFOYahooParser-ParsingXML420INFOWeatherFormatter-FormattingWeatherCurrentWeatherConditionsfor:Evanston,IL,Temperature:45Condition:CloudyHumidity:76WindChill:正如你能看到的,我們已經(jīng)成功的運(yùn)行了SImpleWeather命令行工具,從Yahoo!獲取了一些數(shù)據(jù),解析了結(jié)果,并且通過Velocity格式化了結(jié)果數(shù)據(jù)。pom.xml添加了一些最少的配置。注意我們這里沒有引入“構(gòu)建過程”Java我們所需要做的是包含一些依賴,用來定位合適的Maven坐標(biāo)。MavenExecExec插件允許你運(yùn)行Java類和其它。它不是Maven插件,但它可以從Codehaus的項(xiàng)目得到。想要查看Exec$mvnhelp:describe-Dplugin=exec-這會(huì)列出所有MavenExecHelp插件同時(shí)也會(huì)列出插件的有效參數(shù),如果你想要定制Exec插件很有用,在開發(fā)過程中用來運(yùn)試之外,你不應(yīng)該依賴它來運(yùn)行你的應(yīng)用程序。想要更健壯的解決方案,使用MavenAssembly插件,它在Section4.13,Exec插件讓我們能夠在不往classpath載入適當(dāng)?shù)囊蕾嚨那闆r下,運(yùn)行這個(gè)程序。在任何其它的構(gòu)建系統(tǒng)能夠中,須所有程序依賴到類似于lib/ 包含一個(gè)JAR文件的集合。那樣,我們就必須寫一個(gè)簡(jiǎn)單的,在javaorg.sonatypemavenbook.weather.MainExec能做這樣的工作是因?yàn)镸aven已經(jīng)知道如何創(chuàng)建和管理你的classpath和你的依賴。了解你項(xiàng)目的classpath包含了哪些依賴是很方便也很有用的。這個(gè)項(xiàng)目不僅包含了一些類庫如Dom4JLog4JJaxenVelocityclasspathMavenDependencySimpleWeatherdependency:resolve目標(biāo)。$mvn[INFO][dependency:resolve][INFO]Thefollowingfileshavebeen com.ibm.icu:icu4j:jar:2.6.1(scope= mons-collections:jar:3.1(scope= mons-lang:jar:2.1(scope=compile) dom4j:dom4j:jar:1.6.1(scope=compile) jaxen:jaxen:jar:1.1.1(scope=compile) jdom:jdom:jar:1.0(scope=compile) junit:junit:jar:3.8.1(scope=test) log4j:log4j:jar:1.2.14(scope=compile) oro:oro:jar:2.0.8(scope=compile) velocity:velocity:jar:1.5(scope=compile) xalan:xalan:jar:2.6.0(scope=compile) xerces:xercesImpl:jar:2.6.2(scope=compile) xerces:xmlParserAPIs:jar:2.6.2(scope=compile) xml-apis:xml-apis:jar:1.0.b2(scope=compile) xom:xom:jar:1.0(scope=compile)XercesXMLAPI,Jaxen依賴于Xalan,后者也就在classpathDependency$mvn[INFO][INFO]org.sonatype.mavenbook.ch04:simple-weather:jar:1.0[INFO]+-log4j:lo [INFO]+- [INFO]|\-xml-apis:xml-a [INFO]+-jaxen:j [INFO]|+- [INFO]|+-xerces:xerces [INFO]|\-x |+-|+-[INFO]| \-com.ibm.icu:i [INFO]+-velocity:ve [INFO]|+-commo [INFO]|+- [INFO]|\- [INFO]+- [INFO]\-junit:junit:jar:3.8.1:testMaven的調(diào)試標(biāo)記運(yùn)行:$mvninstall-[DEBUG]org.sonatype.mavenbook.ch04:simple-weather:jar:1.0(selectedfornull) pile(selectedfor pile(selectedfor pile(selectedforcompile) pile(selectedforcompile) pile(removed-causesacycleinthegraph) pile(removed-causesacycleinthegraph) pile(selectedforcompile) pile(removed-nearerfound:1.0.b2) pile(selectedforcompile) pile(selectedforcompile) pile(selectedfor pile(selectedforcompile) pile(selectedforcompile) pile(selectedforcompile) (selectedforcompile) pile(selectedfor pile(selectedforcompile) junit:junit:jar:3.8.1:test(selectedfortest)Maven正打印出你項(xiàng)目的所有的依賴,以及這些依賴的依賴(還有依賴的依賴的依賴)的完整的Mavensimple-weather依賴于jaxenjaxenxomxom正在創(chuàng)建一個(gè)依賴圖,排除重復(fù),解決不同版本之間的。如果你的依賴有問題,通常在Maven內(nèi)建了對(duì)單元測(cè)試的支持,測(cè)試是MavenSimple$cd$cd$mkdir-p$cd目前,會(huì)創(chuàng)建兩個(gè)單元測(cè)試。第一個(gè)單元測(cè)試會(huì)測(cè)試YahooParser,第二個(gè)會(huì)測(cè)試WeatherFormatterweather包中,創(chuàng)建一個(gè)帶有一以下內(nèi)容的文件,名稱為YahooParserTest.java。Example4.11SimpleWeatherYahooParserTestpackageimportimportimportimportpublicclassYahooParserTestextendsTestCasepublicYahooParserTest(Stringname)}publicvoidtestParser()throwsException{InputStreamnyData=Weatherweather=newYahooParser().parse(nyData);assertEquals("NewYork",weather.getCity());assertEquals("NY",weather.getRegion());assertEquals("US",weather.getCountry());assertEquals("39",weather.getTemp());assertEquals("Fair",weather.getCondition());assertEquals("39",weather.getChill());assertEquals("67",weather.getHumidity());}}YahooParserTest繼承了JUnitTestCase測(cè)試的慣例模式:一個(gè)構(gòu)造函數(shù)接受一個(gè)單獨(dú)的testParserXML文檔來測(cè)試YahooParserXMLny-weather.xmlclasspath項(xiàng)目 —Weather對(duì)象,該對(duì)象通過一系列由TestCase定義的assertEquals()調(diào)用而被測(cè)試。 下創(chuàng)建一個(gè)名為WeatherFormatterTest.java的文件。Example4.12SimpleWeatherWeatherFormatterTestpackageimport importimportimportimportpublicclassWeatherFormatterTestextendsTestCasepublicWeatherFormatterTest(Stringname)}publicvoidtestFormat()throwsException{InputStreamnyData=Weatherweather=newYahooParser().parse(nyData);StringformattedResult=newWeatherFormatter().format(weather);InputStreamexpected=assertEquals(IOUtils.toString(expected).trim(),formattedResult.trim());}}一樣,WeatherFormatter同樣也繼承JUnit的TestCase類。這個(gè)單獨(dú)的測(cè)試通過單元測(cè)試的classpath從${basedir}/src/test/resources的 ,“我們的期望輸出被在一個(gè)名為format-expected.dat的文件中,該文件存放在和ny-weather.xml同樣的 中。要比較測(cè)試輸出和期望輸出,期望輸出作為InputStream讀入,然后使用CommonsIO的IOUtils類來把文件轉(zhuǎn)化為String。然后使用assertEquals()比較這個(gè)String和測(cè)試輸出。WeatherFormatterTest中我們用了一個(gè)來自于ApacheCommonsIO的工具IOUtilsI/O操作。在這個(gè)單元測(cè)試中我們使用了IOUtils.toString()來classpath中資源format.expected.datStringCommonsIOInputStreamReader和StringWriter這樣的對(duì)象。我們使用CommonsIO的主要原因是,能有理由添加對(duì)CommonsIOExample4.13 ”一個(gè)單元測(cè)試需要針對(duì)測(cè)試的一組資源。通常你需要在測(cè)試中一些包含期望結(jié)果的文件,以及包含模擬輸入的文件。在本項(xiàng)目中,我們?yōu)閅ahooParserTestny-weather.xmlXML文檔,還有一個(gè)名為format-expected.datWeatherFormatter的期望輸出。 $cd$mkdir$cd Example4.14SimpleWeatherWeatherFormatterTestCurrentWeatherConditionsfor:NewYork,NY,Temperature:39Condition:FairHumidity:67WindChill:這個(gè)文件應(yīng)該看起來很熟悉了,它和你用MavenExec插件運(yùn)行Simple Example4.15SimpleWeatherYahooParserTestXML<?xmlversion="1.0"encoding="UTF-8"standalone="yes"<rss <title>Yahoo!Weather-NewYork, /dailynews/rss/weather/New_York<description>Yahoo!WeatherforNewYork,<lastBuildDate>Sat,10Nov20078:51pm<yweather:locationcity="N
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6~9的認(rèn)識(shí)(說課稿)-2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)人教版
- 2025以買賣合同擔(dān)保
- 2024年秋九年級(jí)化學(xué)上冊(cè) 第四單元 自然界的水說課稿 (新版)新人教版
- 2023三年級(jí)英語上冊(cè) Assessment 3說課稿1 湘少版
- Unit 4 My tidy bag Lesson 1 I have a big bag (說課稿)-2024-2025學(xué)年粵人版(2024)英語三年級(jí)上冊(cè)
- 2023八年級(jí)地理上冊(cè) 第一章 中國(guó)的疆域與人口第一節(jié) 中國(guó)的疆域說課稿 (新版)湘教版
- 出租代工合同范例
- 2024年六年級(jí)品社下冊(cè)《我在聯(lián)合國(guó)做報(bào)告》說課稿3 蘇教版
- 2024年九年級(jí)語文上冊(cè) 第六單元 第23課《答司馬諫議書》說課稿1 北京課改版
- 兒童攝影退款合同范例
- 銷售人員課件教學(xué)課件
- 三級(jí)綜合醫(yī)院評(píng)審標(biāo)準(zhǔn)(2024年版)
- Lesson 6 What colour is it(教學(xué)設(shè)計(jì))-2023-2024學(xué)年接力版英語三年級(jí)下冊(cè)
- GB/T 4706.10-2024家用和類似用途電器的安全第10部分:按摩器具的特殊要求
- NB/T 11446-2023煤礦連采連充技術(shù)要求
- 2024年江蘇省蘇州市中考英語試題卷(含標(biāo)準(zhǔn)答案及解析)
- 第五單元任務(wù)二《準(zhǔn)備與排練》教學(xué)設(shè)計(jì) 統(tǒng)編版語文九年級(jí)下冊(cè)
- 全科醫(yī)學(xué)的基本原則和人文精神(人衛(wèi)第五版全科醫(yī)學(xué)概論)
- 船員健康知識(shí)課件
- 《揚(yáng)州東關(guān)街掠影》課件
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》健康領(lǐng)域內(nèi)容目標(biāo)與指導(dǎo)
評(píng)論
0/150
提交評(píng)論