ʲôÊÇpom?
pom×÷ΪÏîÄ¿¶ÔÏóÄ£ÐÍ¡£Í¨¹ýxml±íʾmavenÏîÄ¿£¬Ê¹ÓÃpom.xmlÀ´ÊµÏÖ¡£Ö÷ÒªÃèÊöÁËÏîÄ¿£º°üÀ¨ÅäÖÃÎļþ£»¿ª·¢ÕßÐèÒª×ñѵĹæÔò£¬È±ÏݹÜÀíϵͳ£¬×éÖ¯ºÍlicenses£¬ÏîÄ¿µÄurl£¬ÏîÄ¿µÄÒÀÀµÐÔ£¬ÒÔ¼°ÆäËûËùÓеÄÏîÄ¿Ïà¹ØÒòËØ¡£
¿ìËٲ쿴£º
<project> <modelVersion>4.0.0<!---->modelVersion> <!----> <groupId>...<!---->groupId> <artifactId>...<!---->artifactId> <version>...<!---->version> <packaging>...<!---->packaging> <dependencies>...<!---->dependencies> <parent>...<!---->parent> <dependencyManagement>...<!---->dependencyManagement> <modules>...<!---->modules> <properties>...<!---->properties> <!----> <build>...<!---->build> <reporting>...<!---->reporting> <!----> <name>...<!---->name> <description>...<!---->description> <url>...<!---->url> <inceptionYear>...<!---->inceptionYear> <licenses>...<!---->licenses> <organization>...<!---->organization> <developers>...<!---->developers> <contributors>...<!---->contributors> <!----> <issueManagement>...<!---->issueManagement> <ciManagement>...<!---->ciManagement> <mailingLists>...<!---->mailingLists> <scm>...<!---->scm> <prerequisites>...<!---->prerequisites> <repositories>...<!---->repositories> <pluginRepositories>...<!---->pluginRepositories> <distributionManagement>...<!---->distributionManagement> <profiles>...<!---->profiles> <!---->project> |
»ù±¾ÄÚÈÝ£º
POM°üÀ¨ÁËËùÓеÄÏîÄ¿ÐÅÏ¢¡£
maven Ïà¹Ø£º
pom¶¨ÒåÁË×îСµÄmaven2ÔªËØ£¬ÔÊÐígroupId,artifactId,version¡£ËùÓÐÐèÒªµÄÔªËØ
groupId:ÏîÄ¿»òÕß×éÖ¯µÄΨһ±êÖ¾£¬²¢ÇÒÅäÖÃʱÉú³ÉµÄ·¾¶Ò²ÊÇÓÉ´ËÉú³É£¬Èçorg.codehaus.mojoÉú³ÉµÄÏà¶Ô·¾¶Îª£º/org/codehaus/mojo
artifactId: ÏîÄ¿µÄͨÓÃÃû³Æ
version:ÏîÄ¿µÄ°æ±¾
packaging: ´ò°üµÄ»úÖÆ£¬Èçpom, jar, maven-plugin, ejb, war,
ear, rar, par
classifier: ·ÖÀà
POM¹ØÏµ£º
Ö÷ҪΪÒÀÀµ£¬¼Ì³Ð£¬ºÏ³É
ÒÀÀµ¹ØÏµ£º
<dependencies> <dependency> <groupId>junit<!---->groupId> <artifactId>junit<!---->artifactId> <version>4.0<!---->version> <type>jar<!---->type> <scope>test<!---->scope> <optional>true<!---->optional> <!---->dependency> ... <!---->dependencies> |
groupId, artifactId, version:ÃèÊöÁËÒÀÀµµÄÏîĿΨһ±êÖ¾
¿ÉÒÔͨ¹ýÒÔÏ·½Ê½½øÐа²×°£º
ʹÓÃÒÔϵÄÃüÁî°²×°£º
mvn install:install-file ¨CDfile=non-maven-proj.jar
¨CDgroupId=some.group ¨CDartifactId=non-maven-proj ¨CDversion=1
´´½¨×Ô¼ºµÄ¿â,²¢ÅäÖã¬Ê¹ÓÃdeploy:deploy-file
ÉèÖôËÒÀÀµ·¶Î§Îªsystem£¬¶¨ÒåÒ»¸öϵͳ·¾¶¡£²»Ìᳫ¡£
type:ÏàÓ¦µÄÒÀÀµ²úÆ·°üÐÎʽ£¬Èçjar£¬war
scope:ÓÃÓÚÏÞÖÆÏàÓ¦µÄÒÀÀµ·¶Î§£¬°üÀ¨ÒÔϵļ¸ÖÖ±äÁ¿£º
compile £ºÄ¬ÈÏ·¶Î§£¬ÓÃÓÚ±àÒë
provided£ºÀàËÆÓÚ±àÒ룬µ«Ö§³ÖÄãÆÚ´ýjdk»òÕßÈÝÆ÷Ìṩ£¬ÀàËÆÓÚclasspath
runtime:ÔÚÖ´ÐÐʱ£¬ÐèҪʹÓÃ
test:ÓÃÓÚtestÈÎÎñʱʹÓÃ
system:ÐèÒªÍâÔÚÌṩÏàÓ¦µÃÔªËØ¡£Í¨¹ýsystemPathÀ´È¡µÃ
systemPath: ½öÓÃÓÚ·¶Î§Îªsystem¡£ÌṩÏàÓ¦µÄ·¾¶
optional: ±ê×¢¿ÉÑ¡£¬µ±ÏîÄ¿×ÔÉíÒ²ÊÇÒÀÀµÊ±¡£ÓÃÓÚÁ¬ÐøÒÀÀµÊ±Ê¹ÓÃ
¶ÀÕ¼ÐÔ
ÍâÔÚ¸æËßmavenÄãÖ»°üÀ¨Ö¸¶¨µÄÏîÄ¿£¬²»°üÀ¨Ïà¹ØµÄÒÀÀµ¡£´ËÒòËØÖ÷ÒªÓÃÓÚ½â¾ö°æ±¾³åÍ»ÎÊÌâ
<dependencies> <dependency> <groupId>org.apache.maven<!---->groupId> <artifactId>maven-embedder<!---->artifactId> <version>2.0<!---->version> <exclusions> <exclusion> <groupId>org.apache.maven<!---->groupId> <artifactId>maven-core<!---->artifactId> <!---->exclusion> <!---->exclusions> <!---->dependency> |
±íʾÏîÄ¿maven-embedderÐèÒªÏîÄ¿maven-core£¬µ«ÎÒÃDz»ÏëÒýÓÃmaven-core
¼Ì³Ð¹ØÏµ
ÁíÒ»¸öÇ¿´óµÄ±ä»¯,maven´øÀ´µÄÊÇÏîÄ¿¼Ì³Ð¡£Ö÷ÒªµÄÉèÖãº
¶¨Ò常ÏîÄ¿
<project> <modelVersion>4.0.0<!---->modelVersion> <groupId>org.codehaus.mojo<!---->groupId> <artifactId>my-parent<!---->artifactId> <version>2.0<!---->version> <packaging>pom<!---->packaging> <!---->project> |
packaging ÀàÐÍ£¬ÐèÒªpomÓÃÓÚparentºÍºÏ³É¶à¸öÏîÄ¿¡£ÎÒÃÇÐèÒªÔö¼ÓÏàÓ¦µÄÖµ¸ø¸¸pom£¬ÓÃÓÚ×ÓÏîÄ¿¼Ì³Ð¡£Ö÷ÒªµÄÔªËØÈçÏ£º
ÒÀÀµÐÍ
¿ª·¢ÕߺͺÏ×÷Õß
²å¼þÁбí
±¨±íÁбí
²å¼þÖ´ÐÐʹÓÃÏàÓ¦µÄÆ¥Åäids
²å¼þÅäÖÃ
×ÓÏîÄ¿ÅäÖÃ
<project> <modelVersion>4.0.0<!---->modelVersion> <parent> <groupId>org.codehaus.mojo<!---->groupId> <artifactId>my-parent<!---->artifactId> <version>2.0<!---->version> <relativePath>../my-parent<!---->relativePath> <!---->parent> <artifactId>my-project<!---->artifactId> <!---->project> |
relativePath¿ÉÒÔ²»ÐèÒª£¬µ«ÊÇÓÃÓÚÖ¸Ã÷parentµÄĿ¼£¬ÓÃÓÚ¿ìËÙ²éѯ¡£
dependencyManagement£º
ÓÃÓÚ¸¸ÏîÄ¿ÅäÖù²Í¬µÄÒÀÀµ¹ØÏµ£¬Ö÷ÒªÅäÖÃÒÀÀµ°üÏàͬÒòËØ£¬Èç°æ±¾£¬scope¡£
ºÏ³É£¨»òÕß¶à¸öÄ£¿é£©
Ò»¸öÏîÄ¿Óжà¸öÄ£¿é£¬Ò²½Ð×ö¶àÖØÄ£¿é£¬»òÕߺϳÉÏîÄ¿¡£
ÈçÏµĶ¨Ò壺
<project> <modelVersion>4.0.0<!---->modelVersion> <groupId>org.codehaus.mojo<!---->groupId> <artifactId>my-parent<!---->artifactId> <version>2.0<!---->version> <modules> <module>my-project1<module> <module>my-project2<module> <!---->modules> <!---->project> |
build ÉèÖÃ
Ö÷ÒªÓÃÓÚ±àÒëÉèÖ㬰üÀ¨Á½¸öÖ÷ÒªµÄÔªËØ£¬buildºÍreport
build
Ö÷Òª·ÖΪÁ½²¿·Ö£¬»ù±¾ÔªËغÍÀ©Õ¹ÔªËؼ¯ºÏ
×¢Ò⣺°üÀ¨ÏîÄ¿buildºÍprofile build
<project> <!----> <build>...<!---->build> <profiles> <profile> <!----> <build>...<!---->build> <!---->profile> <!---->profiles> <!---->project> |
»ù±¾ÔªËØ
<build> <defaultGoal>install<!---->defaultGoal> <directory>${basedir}/target<!---->directory> <finalName>${artifactId}-${version}<!---->finalName> <filters> <filter>filters/filter1.properties<!---->filter> <!---->filters> ... <!---->build> |
defaultGoal: ¶¨ÒåĬÈϵÄÄ¿±ê»òÕ߽׶Ρ£Èçinstall
directory: ±àÒëÊä³öµÄĿ¼
finalName: Éú³É×îºóµÄÎļþµÄÑùʽ
filter: ¶¨Òå¹ýÂË£¬ÓÃÓÚÌæ»»ÏàÓ¦µÄÊôÐÔÎļþ£¬Ê¹ÓÃmaven¶¨ÒåµÄÊôÐÔ¡£ÉèÖÃËùÓÐplaceholdµÄÖµ
×ÊÔ´(resources)
ÄãÏîÄ¿ÖÐÐèÒªÖ¸¶¨µÄ×ÊÔ´¡£ÈçspringÅäÖÃÎļþ,log4j.properties
<project> <build> ... <resources> <resource> <targetPath>META-INF/plexus<!---->targetPath> <filtering>false<!---->filtering> <directory>${basedir}/src/main/plexus<!---->directory> <includes> <include>configuration.xml<!---->include> <!---->includes> <excludes> <exclude>**/*.properties<!---->exclude> <!---->excludes> <!---->resource> <!---->resources> <testResources> ... <!---->testResources> ... <!---->build> <!---->project> |
resources: resourceµÄÁÐ±í£¬ÓÃÓÚ°üÀ¨ËùÓеÄ×ÊÔ´
targetPath: Ö¸¶¨Ä¿±ê·¾¶£¬ÓÃÓÚ·ÅÖÃ×ÊÔ´£¬ÓÃÓÚbuild
filtering: ÊÇ·ñÌæ»»×ÊÔ´ÖеÄÊôÐÔplacehold
directory: ×ÊÔ´ËùÔÚµÄλÖÃ
includes: Ñùʽ£¬°üÀ¨ÄÇЩ×ÊÔ´
excludes: ÅųýµÄ×ÊÔ´
testResources: ²âÊÔ×ÊÔ´Áбí
²å¼þ
ÔÚbuildʱ£¬Ö´ÐеIJå¼þ£¬±È½ÏÓÐÓõIJ¿·Ö£¬ÈçʹÓÃjdk 5.0±àÒëµÈµÈ
<project> <build> ... <plugins> <plugin> <groupId>org.apache.maven.plugins<!---->groupId> <artifactId>maven-jar-plugin<!---->artifactId> <version>2.0<!---->version> <extensions>false<!---->extensions> <inherited>true<!---->inherited> <configuration> <classifier>test<!---->classifier> <!---->configuration> <dependencies>...<!---->dependencies> <executions>...<!---->executions> <!---->plugin> <!---->plugins> <!---->build> <!---->project> |
extensions: true or false£¬ÊÇ·ñ×°ÔØ²å¼þÀ©Õ¹¡£Ä¬ÈÏfalse
inherited: true or false£¬ÊÇ·ñ´Ë²å¼þÅäÖý«»áÓ¦ÓÃÓÚpoms£¬ÄÇЩ¼Ì³ÐÓڴ˵ÄÏîÄ¿
configuration: Ö¸¶¨²å¼þÅäÖÃ
dependencies: ²å¼þÐèÒªÒÀÀµµÄ°ü
executions: ÓÃÓÚÅäÖÃexecutionÄ¿±ê£¬Ò»¸ö²å¼þ¿ÉÒÔÓжà¸öÄ¿±ê¡£
ÈçÏ£º
<plugin> <artifactId>maven-antrun-plugin<!---->artifactId> <executions> <execution> <id>echodir<!---->id> <goals> <goal>run<!---->goal> <!---->goals> <phase>verify<!---->phase> <inherited>false<!---->inherited> <configuration> <tasks> <echo>Build Dir: ${project.build.directory}<!---->echo> <!---->tasks> <!---->configuration> <!---->execution> <!---->executions> <!---->plugin> |
˵Ã÷£º
id:¹æ¶¨execution µÄΨһ±êÖ¾
goals: ±íʾĿ±ê
phase: ±íʾ½×¶Î£¬Ä¿±ê½«»áÔÚʲô½×¶ÎÖ´ÐÐ
inherited: ºÍÉÏÃæµÄÔªËØÒ»Ñù£¬ÉèÖÃfalse maven½«»á¾Ü¾øÖ´Ðм̳иø×Ó²å¼þ
configuration: ±íʾ´ËÖ´ÐеÄÅäÖÃÊôÐÔ
²å¼þ¹ÜÀí
pluginManagement£º²å¼þ¹ÜÀíÒÔͬÑùµÄ·½Ê½°üÀ¨²å¼þÔªËØ£¬ÓÃÓÚÔÚÌØ¶¨µÄÏîÄ¿ÖÐÅäÖá£ËùÓм̳ÐÓÚ´ËÏîÄ¿µÄ×ÓÏîÄ¿¶¼ÄÜʹÓá£Ö÷Òª¶¨Òå²å¼þµÄ¹²Í¬ÔªËØ
À©Õ¹ÔªËؼ¯ºÏ
Ö÷Òª°üÀ¨ÒÔϵÄÔªËØ£º
Directories
ÓÃÓÚÉèÖø÷ÖÖĿ¼½á¹¹£¬ÈçÏ£º
<build> <sourceDirectory>${basedir}/src/main/java<!---->sourceDirectory> <scriptSourceDirectory>${basedir}/src/main/scripts<!---->scriptSourceDirectory> <testSourceDirectory>${basedir}/src/test/java<!---->testSourceDirectory> <outputDirectory>${basedir}/target/classes<!---->outputDirectory> <testOutputDirectory>${basedir}/target/test-classes<!---->testOutputDirectory> ... <!---->build> |
Extensions
±íʾÐèÒªÀ©Õ¹µÄ²å¼þ£¬±ØÐë°üÀ¨½øÏàÓ¦µÄbuild·¾¶¡£
<project> <build> ... <extensions> <extension> <groupId>org.apache.maven.wagon<!---->groupId> <artifactId>wagon-ftp<!---->artifactId> <version>1.0-alpha-3<!---->version> <!---->extension> <!---->extensions> ... <!---->build> <!---->project> |
Reporting
ÓÃÓÚÔÚsite½×¶ÎÊä³ö±¨±í¡£Ìض¨µÄmaven ²å¼þÄÜÊä³öÏàÓ¦µÄ¶¨ÖƺÍÅäÖñ¨±í¡£
<reporting> <plugins> <plugin> <outputDirectory>${basedir}/target/site<!---->outputDirectory> <artifactId>maven-project-info-reports-plugin<!---->artifactId> <reportSets> <reportSet><!---->reportSet> <!---->reportSets> <!---->plugin> <!---->plugins> <!---->reporting> |
Report Sets
ÓÃÓÚÅäÖò»Í¬µÄÄ¿±ê£¬Ó¦ÓÃÓÚ²»Í¬µÄ±¨±í
<reporting> <plugins> <plugin> ... <reportSets> <reportSet> <id>sunlink<!---->id> <reports> <report>javadoc<!---->report> <!---->reports> <inherited>true<!---->inherited> <configuration> <links> <link>http://java.sun.com/j2se/1.5.0/docs/api/<!---->link> <!---->links> <!---->configuration> <!---->reportSet> <!---->reportSets> <!---->plugin> <!---->plugins> <!---->reporting> |
¸ü¶àµÄÏîÄ¿ÐÅÏ¢
name:ÏîÄ¿³ýÁËartifactIdÍ⣬¿ÉÒÔ¶¨Òå¶à¸öÃû³Æ
description: ÏîÄ¿ÃèÊö
url: ÏîÄ¿url
inceptionYear:´´Ê¼Äê·Ý
Licenses
<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
ÅäÖÃ×éÖ¯ÐÅÏ¢
<organization> <name>Codehaus Mojo<!---->name> <url>http://mojo.codehaus.org<!---->url> <!---->organization> |
Developers
ÅäÖÿª·¢ÕßÐÅÏ¢
<developers> <developer> <id>eric<!---->id> <name>Eric<!---->name> <email>eredmond@codehaus.org<!---->email> <url>http://eric.propellors.net<!---->url> <organization>Codehaus<!---->organization> <organizationUrl>http://mojo.codehaus.org<!---->organizationUrl> <roles> <role>architect<!---->role> <role>developer<!---->role> <!---->roles> <timezone>-6<!---->timezone> <properties> <picUrl>http://tinyurl.com/prv4t<!---->picUrl> <!---->properties> <!---->developer> <!---->developers> |
Contributors
<contributors> <contributor> <name>Noelle<!---->name> <email>some.name@gmail.com<!---->email> <url>http://noellemarie.com<!---->url> <organization>Noelle Marie<!---->organization> <organizationUrl>http://noellemarie.com<!---->organizationUrl> <roles> <role>tester<!---->role> <!---->roles> <timezone>-5<!---->timezone> <properties> <gtalk>some.name@gmail.com<!---->gtalk> <!---->properties> <!---->contributor> <!---->contributors> |
»·¾³ÉèÖÃ
Issue Management
¶¨ÒåÏà¹ØµÄbug¸ú×Ùϵͳ£¬Èçbugzilla,testtrack,clearQuestµÈ
<issueManagement> <system>Bugzilla<!---->system> <url>http://127.0.0.1/bugzilla<!---->url> <!---->issueManagement> |
Continuous Integration Management
Á¬ÐøÕûºÏ¹ÜÀí£¬»ùÓÚtriggers»òÕßtimings
<ciManagement> <system>continuum<!---->system> <url>http://127.0.0.1:8080/continuum<!---->url> <notifiers> <notifier> <type>mail<!---->type> <sendOnError>true<!---->sendOnError> <sendOnFailure>true<!---->sendOnFailure> <sendOnSuccess>false<!---->sendOnSuccess> <sendOnWarning>false<!---->sendOnWarning> <configuration><address>continuum@127.0.0.1<!---->address><!---->configuration> <!---->notifier> <!---->notifiers> <!---->ciManagement> |
Mailing Lists
<mailingLists> <mailingList> <name>User List<!---->name> <subscribe>user-subscribe@127.0.0.1<!---->subscribe> <unsubscribe>user-unsubscribe@127.0.0.1<!---->unsubscribe> <post>user@127.0.0.1<!---->post> <archive>http://127.0.0.1/user/<!---->archive> <otherArchives> <otherArchive>http://base.google.com/base/1/127.0.0.1<!---->otherArchive> <!---->otherArchives> <!---->mailingList> <!---->mailingLists> |
SCM
Èí¼þÅäÖùÜÀí£¬Èçcvs ºÍsvn
<scm> <connection>scm:svn:http://127.0.0.1/svn/my-project<!---->connection> <developerConnection>scm:svn:https://127.0.0.1/svn/my-project<!---->developerConnection> <tag>HEAD<!---->tag> <url>http://127.0.0.1/websvn/my-project<!---->url> <!---->scm> |
Repositories
ÅäÖÃͬsetting.xmlÖеĿª·¢¿â
Plugin Repositories
ÅäÖÃͬ repositories
Distribution Management
ÓÃÓÚÅäÖ÷ַ¢¹ÜÀí£¬ÅäÖÃÏàÓ¦µÄ²úÆ··¢²¼ÐÅÏ¢,Ö÷ÒªÓÃÓÚ·¢²¼£¬ÔÚÖ´ÐÐmvn deployºó±íʾҪ·¢²¼µÄλÖÃ
1 ÅäÖõ½Îļþϵͳ
<distributionManagement> <repository> <id>proficio-repository<!---->id> <name>Proficio Repository<!---->name> <url>file://${basedir}/target/deploy<!---->url> <!---->repository> <!---->distributionManagement> |
2 ʹÓÃssh2ÅäÖÃ
<distributionManagement> <repository> <id>proficio-repository<!---->id> <name>Proficio Repository<!---->name> <url>scp://sshserver.yourcompany.com/deploy<!---->url> <!---->repository> <!---->distributionManagement> |
3 ʹÓÃsftpÅäÖÃ
<distributionManagement> <repository> <id>proficio-repository<!---->id> <name>Proficio Repository<!---->name> <url>sftp://ftpserver.yourcompany.com/deploy<!---->url> <!---->repository> <!---->distributionManagement> |
4 ʹÓÃÍâÔÚµÄsshÅäÖÃ
±àÒëÀ©Õ¹ÓÃÓÚÖ¸¶¨Ê¹ÓÃwagonÍâÔÚsshÌṩ£¬ÓÃÓÚÌṩÄãµÄÎļþµ½ÏàÓ¦µÄÔ¶³Ì·þÎñÆ÷¡£
<distributionManagement> <repository> <id>proficio-repository<!---->id> <name>Proficio Repository<!---->name> <url>scpexe://sshserver.yourcompany.com/deploy<!---->url> <!---->repository> <!---->distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon<!---->groupId> <artifactId>wagon-ssh-external<!---->artifactId> <version>1.0-alpha-6<!---->version> <!---->extension> <!---->extensions> <!---->build> |
5 ʹÓÃftpÅäÖÃ
<distributionManagement> <repository> <id>proficio-repository<!---->id> <name>Proficio Repository<!---->name> <url>ftp://ftpserver.yourcompany.com/deploy<!---->url> <!---->repository> <!---->distributionManagement> <build> <extensions> <extension> <groupId>org.apache.maven.wagon<!---->groupId> <artifactId>wagon-ftp<!---->artifactId> <version>1.0-alpha-6<!---->version> <!---->extension> <!---->extensions> <!---->build> |
repository ¶ÔÓ¦ÓÚÄãµÄ¿ª·¢¿â£¬Óû§ÐÅϢͨ¹ýsettings.xmlÖеÄserverÈ¡µÃ
Profiles
ÀàËÆÓÚsettings.xmlÖеÄprofiles£¬Ôö¼ÓÁ˼¸¸öÔªËØ£¬ÈçϵÄÑùʽ£º
<profiles> <profile> <id>test<!---->id> <activation>...<!---->activation> <build>...<!---->build> <modules>...<!---->modules> <repositories>...<!---->repositories> <pluginRepositories>...<!---->pluginRepositories> <dependencies>...<!---->dependencies> <reporting>...<!---->reporting> <dependencyManagement>...<!---->dependencyManagement> <distributionManagement>...<!---->distributionManagement> <!---->profile> <!---->profiles> |
|