使用Maven
目錄:
?
3.3?????? 使用mvc test-compile編譯測試源碼
3.4?????? 使用mvc test編譯源碼和測試源碼進行測試
3.6???????使用mvn install安裝jar包到maven的本地倉庫
3.7???????使用mvn deploy可以安裝當前項目到遠程倉庫
3.8? ? ???使用mvn clean可以清除存放臨時文件的target目錄
3.10.1????????? 使用pom.xml和settings.xml中的元素element作為屬性
3.11? ? ? ? ? ?在pom.xml中定義project的外部依賴包
3.12 ? ? ? ? ? 使用mvn dependency:tree可以查看一個項目的依賴關系
3.13? ? ? ? ? ?修改Maven同時下載artifact的最大數
3.14? ? ? ? ? ?在斷開網絡的情況下執行Maven指令
3.16????使用mvn javadoc:jar生成javadoc
3.17 ? ?使用mvn dependency:sources下載源碼
?
3.1???? 使用maven建立自己的項目
?? (1)切換到項目所在的目錄,如:d:\\develop\\apps
?? (2)執行如下指令:
????? mvn archetype:generate 這樣就可以根據提示來建立一個maven項目
????? 后面可以接很多參數,常用的有:
??????? -DgroupId=com.company.app 組id
??????? -DartifactId=app 項目名稱,maven會根據這個名稱在當前目錄下新建一個名為該名稱的目錄用于建立項目
??????? -DinteractiveMode=false? 是否已交互模式進行,如果是false的話就會采用默認設置建立項目
????? 以下是一個示例:
mvn archetype:generate -DgroupId=com.tiantian -DartifactId=jxc -DinteractiveMode=false
??????? 運行上面的代碼就會在d:\\develop\\apps下面新建一個名為jxc的maven項目
?? 上面建立的只是一個簡單的java應用,那如果我要建立一個web應用該如何呢?以下是一個示例:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.myhost.myapp -DartifactId=myapp
?? 其實使用Maven建立簡單項目時是省略了參數archetypeArtifactId,當沒有指定該參數時默認將使用maven-archetype-quickstart。所以要把上面建立一個普通java應用的Maven項目的指令寫完整的話就應該是:
Mvn archetype:generate –DarchetypeGroupId=org.apache.maven.archetypes –DarchetypeArtifactId=maven-archetype-quickstart –DgroupId=com.tiantian –DartifactId=jxc –DinteractiveMode=false
?? 從上面我們可以看出要建立什么樣的項目就需要使用什么樣的archetype,archetype就是Maven定義好的項目類型的模板,一個對應項目的目錄架構。archetype是通過參數archetypeArtifactId來指定的。除了上面介紹的兩種archetype之外,Maven還為我們提供了以下幾種archetype。
archetypeArtifactId |
描述 |
maven-archetype-archetype |
包含一個archetype的例子,主要用于當我們要建立自己的archetype的時候 |
maven-archetype-j2ee-simple |
包含一個簡單的j2ee應用的例子 |
maven-archetype-plugin |
包含一個Maven plugin的例子 |
maven-archetype-plugin-site |
包含一個Maven plugin site的例子 |
Maven-archetype-portlet |
包含一個portlet的例子 |
Maven-archetype-simple |
包含一個簡單maven項目 |
Maven-archetype-site |
包含一個maven site的例子,它能夠展示一些支持的文檔類型,包括APT、XDoc和FML |
Maven-archetype-site-simple |
包含一個maven site的例子 |
?????? 在后續的內容中將介紹關于如何構建自己的archetype的內容。
3.2???? 使用mvc compile進行源碼編譯
?? 在目錄d:\\develop\\apps下面建立了項目jxc之后,我們就可以進入目錄d:\\develop\\apps\\jxc執行指令mvn compile進行編譯了。編譯后的文件將放在項目根目錄下的target目錄中。
??
3.3???? 使用mvc test-compile編譯測試源碼
?? 在目錄d:\\develop\\apps下建立了項目jxc之后,我們就可以在cmd中切換目錄到d:\\develop\\apps\\jxc,然后執行指令mvc test-compile進行測試源碼編譯。
??
3.4???? 使用mvc test編譯源碼和測試源碼進行測試
?? 在目錄d:\\develop\\apps\\jxc下面執行指令mvc test將先編譯源碼,再編譯測試源碼,然后執行測試代碼。
??
3.5???? 使用mvn package進行項目打包
?? 在項目所在的目錄執行指令mvn package可以進行項目打包,打包方式是在項目根目錄下的pom.xml文件中的packaging元素定義的,如果定義為jar則打為jar包,如果是war則打為war包,如果是ear則為ear包。如果pom.xml中沒有定義packaging元素,則會使用默認值jar。打包后的文件將會放在項目根目錄下的target目錄下。打包后的文件名將是在pom.xml文件中定義的artifactId-version的形式,比如在pom.xml中定義的artifactId是hello,定義的version是1.0,則打包后生成的文件的名稱將是hello-1.0。
??
3.6???? 使用mvn install安裝jar包到maven的本地倉庫
?? 使用mvn install可以把mvn package打包好的jar安裝到maven的本地倉庫。本地倉庫默認是在~/.m2/repository,可以在maven安裝目錄下的conf/settings文件中的localRepository標簽中定義本地倉庫的路徑。
???當我們需要安裝一個本地jar包到本地資源庫的時候我們可以使用“mvn install:install-file”指令,使用該指令時有幾個參數需要指定。file:表示本地jar包所在的路徑;groupId:表示jar包被安裝到本地倉庫之后的groupId;artifactId:表示jar包被安裝到本地倉庫之后的artifactId;version:表示安裝到本地倉庫之后對應的版本;packging:表示當前組件被引用的類型,既然我們是安裝jar包則這里對應的自然是jar了。示例,假如現在我們需要安裝一個jar包“c:\jars\abc.jar”到我們的Maven本地倉庫,那么我們可以在命令窗口執行以下命令:
mvn install:install-file -Dfile=c:\jars\abc.jar -DgroupId=com.tiantian -DartifactId=abc -Dversion=1.0 -Dpackaging=jar
? ?? ?這樣就會把我們的“c:\jars\abc.jar”以groupId為“com.tiantian”,artifactId為“abc”,version為“1.0”,packaging類型為jar安裝到我們的本地倉庫,之后我們就可以直接在我們本地的Maven項目中引用該依賴類型了。如:
<dependency> <groupId>com.tiantian</groupId> <artifactId>abc</artifactId> <version>1.0</version> </dependency>
?
??
3.7???? 使用mvn deploy可以安裝當前項目到遠程倉庫
3.8???? 使用mvn clean可以清除存放臨時文件的target目錄
?
3.9???? 把資源文件一并打到jar包中
如果需要把一些資源文件也一并打包到jar包里面的話,需要在${basedir}/src/main下新建一個resources目錄,然后把所有的資源文件都放到這個目錄中,這樣這些文件都會放到類路徑下面。如果需要在測試代碼中訪問到對應的資源,那么相對的就需要在${basedir}/src/test下新建一個resources目錄,然后把相應的資源文件放在這個目錄下。
?
3.10??????? 過濾資源文件
?? 有的時候有些資源文件中的值我們需要在編譯的時候動態的指定,maven允許我們在建立文件的時候以${property_name}的方式指定,這樣當我們進行編譯的時候就會自動的把property_name對應的值替換${property_name}。這個property可以是pom.xml中定義的值,也可以是settings.xml中定義的值,也可以是定義在外部屬性文件中的值,還可以是系統屬性。maven這種動態替換屬性值的功能默認是關閉的,如果要打開的話需要在項目的pom.xml文件中指定filtering的值為true,默認是false。如下示例:
<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.tiantian.mavenApp</groupId> <artifactId>mavenApp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>mavenAppTest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
?
?? 從上面的文件我們可以看出,filtering這個參數是針對于特定的資源文件目錄的,而且我們還可以使用directory來指定資源文件的存放位置,默認是src/main/resources。這個build元素是有默認值的,因為我們需要改變filtering的值,所以需要重新定義build,然后覆蓋里面的默認值。
??
3.10.1使用pom.xml和settings.xml中的元素element作為屬性
?? 我們可以使用pom.xml文件中的element對應的值來作為屬性值。在maven中,使用pom來表示pom.xml中的根元素project,所以我們可以使用${pom.name}來表示project元素下面的name元素,使用${pom.version}來表示project元素下面的version元素。有些元素在pom.xml文件中是沒有明確定義的,但是那不代表它們不存在,這是因為它們有一個默認值,像這種元素我們也可以直接拿來使用。同樣的我們需要使用settings.xml中的元素的時候可以使用settings前綴來關聯,如${settings.localRepository}就是在settings.xml中定義的localRepository元素的值。下面是一組示例,文件都是定義在resources目錄下的:
?? 文件application.properties
project_name=${pom.name} project_version=${pom.version} project_modelVersion=${pom.modelVersion} project_artifactId=${pom.artifactId} settings_localRepository=${settings.localRepository}
??
?? 文件test.txt
project_version=${pom.version} project_modelVersion=${pom.modelVersion} project_artifactId=${pom.artifactId} settings_localRepository=${settings.localRepository}
?
?? 在resources目錄下定義了上面兩個文件之后,在命令行模式下進入pom.xml文件所在的那一級目錄,也就是項目的根目錄,之后使用mvn compile進行編譯,編譯后可以到target/classes目錄下找到對應的資源文件,打開可以看到如下內容:
?? application.properties文件的內容:
project_name=mavenAppTest project_version=1.0-SNAPSHOT project_modelVersion=4.0.0 project_artifactId=mavenApp settings_localRepository=D:\\develop\\mavenRepository
??
?? test.txt文件的內容:
project_version=1.0-SNAPSHOT project_modelVersion=4.0.0 project_artifactId=mavenApp settings_localRepository=D:\\develop\\mavenRepository
??
?? 如果我們只需要對資源文件進行處理的話也可以使用mvn process-resources指令,該指令是專門用于處理資源文件的,而mvn compile是在編譯的時候處理了資源文件。
3.10.2使用外部文件的屬性關聯
?????? 要使用外部文件的屬性來關聯資源文件里面定義的屬性值,那么我們就需要告訴maven應該去哪里找這個屬性文件,這是通過在pom.xml中指定filter的值來指定的。
<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.tiantian.mavenApp</groupId> <artifactId>mavenApp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>mavenAppTest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <filters> <filter>src/main/filters/testFilter.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
?
?? 在上面代碼中我們通過build下面的filters下面的filter元素指定了一個外部用于資源文件過濾的屬性文件src/main/filters/testFilter.properties,接著我們在src/main/filters下面建立testFilter.properties文件,其內容如下:
myFilter.maven.test=test myFilter.maven.username=andy
?
然后我們在resources目錄下面定義一個application.properties文件,內容如下:
project_name=${pom.name} project_version=${pom.version} project_modelVersion=${pom.modelVersion} project_artifactId=${pom.artifactId} settings_localRepository=${settings.localRepository} filter_username=${myFilter.maven.username}
?
?? 接下來我們執行mvn process-resources指令來處理資源文件,將在target/classes下面對應的application.properties文件中看到如下內容:
project_name=mavenAppTest project_version=1.0-SNAPSHOT project_modelVersion=4.0.0 project_artifactId=mavenApp settings_localRepository=D:\\develop\\mavenRepository filter_username=andy
?
?? 我們可以看到我們在application.properties文件中定義的${myFilter.maven.username}已經被指定的外部屬性文件testFilter.properties的屬性myFilter.maven.username對應的屬性值andy所取代。像這種指定外部屬性文件來過濾資源文件的方式也可以在pom.xml中的properties元素下指定對應的子元素作為屬性名稱的形式來達到相同的效果。在上面示例的基礎上,我們先在pom.xml文件的properties元素下面加一個myFilter.maven.username元素,然后指定其值為super,這時候pom.xml文件會是這個樣子:
<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.tiantian.mavenApp</groupId> <artifactId>mavenApp</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>mavenAppTest</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <myFilter.maven.username>super</myFilter.maven.username> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <filters> <filter>src/main/filters/testFilter.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> </project>
?
?? 接著,我們再次運行mvn process-resources指令,然后查看target/classes目錄下的application.properties文件的內容會是這個樣子:
project_name=mavenAppTest project_version=1.0-SNAPSHOT project_modelVersion=4.0.0 project_artifactId=mavenApp settings_localRepository=D:\\develop\\mavenRepository filter_username=super
?
?? 我們可以看到filter_username已經由src/main/filters/testFilter.properties中指定的屬性myFilter.maven.username的值user變成了pom.xml中properties元素的子元素myFilter.maven.username的值super。由此我們也可以看出在pom.xml文件內部定義的屬性值將具有更高的優先級,它會覆蓋外部屬性文件中相同的屬性定義。
?? 跟需要替換屬性值的資源文件可以是不同的文件類型一樣,用于關聯屬性的外部文件也可以是不同的文件類型。為了證明這個問題,我們先在pom.xml中新增一個filter元素,其值指向src/main/filters/testFilter.txt,然后在src/main/filters下新建文件內容為myFilter.maven.fileType=text的testFilter.txt文件,接著在資源文件application.properties中新增一行內容為filter_fileType=${myFilter.maven.fileType},之后運行mvn process-resources指令,之后我們可以看到target/classes下的資源文件application.properties的文件內容如下:
project_name=mavenAppTest project_version=1.0-SNAPSHOT project_modelVersion=4.0.0 project_artifactId=mavenApp settings_localRepository=D:\\develop\\mavenRepository filter_username=super filter_fileType=text
?
3.10.3使用系統屬性
?????? 過濾資源還可以使用來自系統屬性的值,比如java.version,或者在命令行使用-D參數指定的參數。我們來做一下實驗,先把我們的application.properties文件修改為如下內容:
project_name=${pom.name} java_version=${java.version} user_home=${user.home} command.line.prop=${command.line.prop}
?
接下來,我們執行指令mvn process-resources –Dcommand.line.prop=hello,之后我們可以看到target/classes下文件application.properties的內容為:
project_name=mavenAppTest java_version=1.7.0_07 user_home=C:\\Users\\andy command.line.prop=hello
?
3.11??????? 在pom.xml中定義project的外部依賴包
對于每一個外部依賴都有4個元素是必須定義的,它們是groupId、artifactId、version和scope。其中groupId、artifactId和version必須和依賴包中使用maven打包時定義的pom.xml中定義的相對應的元素的值相同。比如說我們有一個maven項目叫projectA,它的pom.xml中定義的groupId、artifactId和version如下:
<groupId>com.tiantian.projectA</groupId> <artifactId>projectA</artifactId> <version>1.0</version>
?
?????? 之后我們用mvn package把projectA打包為一個jar包,然后使用mvn install把打好的jar包安裝到本地倉庫。這個時候有另一個項目projectB,它需要在它的pom.xml中定義對projectA的依賴,這個時候它的pom.xml中定義對projectA依賴的groupId、artifactId和version都應該和projectA的pom.xml中定義的保持一致,具體代碼如下:
<dependency> <groupId>com.tiantian.projectA</groupId> <artifactId>projectA</artifactId> <version>1.0</version> <scope>running</scope> </dependency>
?
?????? 元素scope的值表示引用的作用范圍,主要取值有compile、test、provided、runtime和system。關于scope的更多介紹將在以后的文中作更多的介紹。對于pom.xml中使用dependency定義的引用信息,maven在需要使用的時候會先從本地倉庫取,如果在本地倉庫取不到的時候就會嘗試從遠程倉庫下載。
?????? 當我們需要引用一個依賴包,而不知道其對應的groupId等信息的時候,我們可以在網站 http://mvnrepository.com/ 中進行搜索尋找對應的依賴包。
?
?
3.12????????使用mvn dependency:tree可以查看項目的依賴關系
?進入到項目的pom.xml文件所在的目錄后,使用mvn dependency:tree指令可以查看當前項目的依賴關系。
?
?
3.13? ? ? ??修改Maven同時下載artifact的最大數
默認情況下,Maven同時下載artifact的數量是5,這個可以通過參數maven.artifact.threads。比如如果我們希望一次只下載3個artifact的時候,我們就可以這樣用:
mvn –Dmaven.artifact.threads=3 install
?????? 如果需要這個參數永久生效的話我們就可以把這個參數定義到環境變量MAVEN_OPTS中。
3.14 ? ? ? ?在斷開網絡的情況下執行Maven指令
有時候我們連不上網或者我們需要在不訪問網絡的情況下進行某些操作,這個時候我們就可以在執行Maven指令的時候使用-o參數,比如:
mvn –o package
?
3.15??????? 構建自己的archetype
正如前面內容所介紹的那樣,archetype就是Maven給我們提供的一種建立Maven項目的模板,它可以為我們建立我們自己想要的項目的初始目錄結構和內容。但是Maven本身為我們提供的那些archetype在實際應用中是遠遠不夠的,這就需要我們來擴展構建自己的archetype。archetype實際上也是一個Maven工件,所以當我們需要構建自己的archetype的時候也是通過對Maven項目的定義來構建的。下面將以一個示例來談一下我們該如何構建屬于自己的archetype,這個例子只是用于介紹如何構建自己的archetype的,其中文檔結構和內容等不合理的地方我們在這里就不做深究了。假設我們開發的都是web項目,然后經常使用spring進行開發,然后我們需要創建一個目錄結構如下的archetype。
第一步:創建一個簡單的Maven項目,定義好它的groupId、artifactId和version,這三個屬性就對應了我們需要建立的archetype的三個主要屬性,在我們以后使用該archetype的時候會用到。這里我們使用“mvn archetype:generate –DgroupId=com.tiantian –DartifactId=myArchetype –Dversion=1.0 –DinteractiveMode=false”指令建立一個簡單的Maven項目。這個時候myArchetype的pom.xml應該是如下這樣:
<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> <groupId>com.tiantian</groupId> <artifactId>myArchetype</artifactId> <packaging>jar</packaging> <version>1.0</version> <name>myArchetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> 關于這段代碼我們可以把里面無關緊要的內容刪掉,那么最簡單是形式應該是如下所示: <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> <groupId>com.tiantian</groupId> <artifactId>myArchetype</artifactId> <version>1.0</version> </project>
?
第二步:建立一個archetype.xml文件,用于描述需要構建的archetype,主要是描述該archetype建立的項目將包含哪些文件。這個文件必須放在“src/main/resources/META-INF/maven”下面。在這里我們這個archetype.xml的內容會如下所示:
<archetype xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype/1.0.0 http://maven.apache.org/xsd/archetype-1.0.0.xsd"> <id>myArchetype</id> <sources> <source>src/main/java/Hello.java</source> </sources> <resources> <resource>src/main/resources/jdbc.properties</resource> <resource>src/main/webapp/WEB-INF/web.xml</resource> <resource>src/main/webapp/WEB-INF/application.xml</resource> <resource>src/main/webapp/index.jsp</resource> </resources> <testSources> <source>src/test/java/Hello.java</source> </testSources> </archetype>
?
id是必須配置的,而且必須和我們定義的archetype的artifactId一致。sources用于定義java源碼對應的目錄,其下可以定義一系列的source元素。testSources用于定義測試源碼對應的目錄,其下也是可以定義一系列的source元素。resources、testResources和siteResources下面可以定義一系列的resource元素,表示資源文件所處的位置。
第三步:在archetype.xml中定義了該archetype將包含哪些文件之后我們就需要定義這些文件。那么這些文件是定義在哪里的呢?這些文件的位置都是當前項目的resources/archetype-resources目錄下面對應的位置。即“src/main/resources/archetype-resources /src/main/java/Hello.java”、
“src/main/resources/archetype-resources /src/main/resources/jdbc.properties”、
“src/main/resources/archetype-resources /src/main/webapp/WEB-INF/web.xml”、
“src/main/resources/archetype-resources /src/main/webapp/WEB-INF/application.xml”、
“src/main/resources/archetype-resources /src/main/webapp/index.jsp”、
“src/main/resources/archetype-resources /src/test/java/Hello.java”。
這其中當然也包括pom.xml文件的定義。其目錄結構大概如下圖所示:
這個時候我們也可以指定上述文件的初始內容,比如web.xml的內容為:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.do</welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <servlet> <servlet-name>${artifactId}</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:${artifactId}-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>${artifactId}</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
?
?????? 從上面這段代碼我們可以看出,我們已經把一些針對特定項目要特定配置的項給參數化了。這樣當我們建立項目的時候給定的參數會自動覆蓋這些變量。
接下來就是定義我們生成的pom.xml文件的內容了。這里我們如下定義:
<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> <groupId>${groupId}</groupId> <artifactId>${artifactId}</artifactId> <packaging>war</packaging> <version>${version}</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.0.RELEASE</version> <scope>runtime</scope> </dependency> </dependencies> </project>
?
從上面的定義中我們可以看出這里的groupId、artifactId和version都是使用的參數形式,而packaging和dependency就是我們直接寫好的。這是因為我們需要使用這個archetype來建立同一類型的不同的artifact。
第四步:使用“mvn install”安裝該新建的archetype工件到本地倉庫。
經過這幾步之后我們就可以使用自己定義的myArchetype進行自己項目的建立了。如:
mvn archetype:generate –DarchetypeGroupId=com.tiantian –DarchetypeArtifactId=myArchetype –DarchetypeVersion=1.0 –DgroupId=com.myhost –DartifactId=myapp –Dversion=1.0
?
使用該指令建立的項目的目錄結構如下所示:
其中web.xml的內容變為:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.do</welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> <servlet> <servlet-name>myapp</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:myapp-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myapp</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
?
使用myArchetype建立的Maven項目myapp中的pom.xml的內容如下:
<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> <groupId>com.myhost</groupId> <artifactId>myapp</artifactId> <packaging>war</packaging> <version>1.0</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.0.RELEASE</version> <scope>runtime</scope> </dependency> </dependencies> </project>
?
?????? 以上就是自己構建Maven的archetype的基本步驟。其實這些東西如果全部需要自己去建好的話還是比較麻煩的。針對于構建自己的archetype,Maven也給我們提供了一個建立自己的archetype的archetype,那就是3.1節里面提過的maven-archetype-archetype。下面就簡單介紹一下利用Maven提供的maven-archetype-archetype來建立我們自己的archetype。
?
mvn archetype:generate –DarchetypeGroupId=org.apache.maven.archetypes –DarchetypeArtifactId=maven-archetype-archetype –DgroupId=com.tiantian –DartifactId=myArchetype –Dversion=1.0 –DinteractiveMode=false
?
?????? 通過上面的指令可以建立簡單的archetype的示例,接著我們就可以根據自己的需要修改需要建立的archetype的描述文件archetype.xml,然后在對應的archetype-resources目錄下建立對應的文件即可。接下來的操作一樣是通過“mvn install”指令安裝該archetype工件到本地倉庫,這樣我們以后就可以通過該archetype來建立我們預定好的Maven項目了。
?
3.16??????? 使用mvn javadoc:jar生成對應的javadoc
在Maven項目的根目錄即pom.xml文件所在的目錄下使用mvn javadoc:jar可以生成當前項目對應的java doc。
?
?
3.17??????? 使用mvn dependency:sources下載對應的源碼
在Maven項目的根目錄即pom.xml文件所在的目錄下使用mvn dependency:sources可以下載對應依賴包的源碼。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
