手動建立Maven專案並建立兩個專案之間的依賴關係
阿新 • • 發佈:2019-02-20
用命令列快速建立maven專案
-> mvn:archetype:generate
-> 直接回車或者自己輸入你想生成的
-> groupId
->artifactId
->如果有預設值回車即可
最後 y 確認建立
我們看下他的目錄結構
專案名:
src
->main
->java
->test
->java
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>xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>xxxx</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>
</project>
如何手動建立最簡單的Maven專案並驗證
在我建立了資料夾helloMaven後
建立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>xxxx</groupId>
<artifactId>helloMaven</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
發現就可以使用 mvn clean 即證明mvn專案僅需要pom.xml支援即可秉澤artifactId和資料夾名不需要相同
Maven的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">
<!-- 模型版本。maven2.0必須是這樣寫,現在是maven2唯一支援的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者組織的唯一標誌,並且配置時生成的路徑也是由此生成, 如com.winner.trade,maven會將該專案打成的jar包放本地路徑:/com/winner/trade -->
<groupId>gstd</groupId>
<!-- 本專案的唯一ID,一個groupId下面可能多個專案,就是靠artifactId來區分的 -->
<artifactId>wocpWeb</artifactId>
<!-- 打包的機制,如pom,jar, maven-plugin, ejb, war, ear, rar, par,預設為jar -->
<packaging>war</packaging>
<!-- 本專案目前所處的版本號 -->
<version>0.0.1-SNAPSHOT</version>
<!--專案的名稱, Maven產生的文件用 -->
<name>gstd-wocpWeb Maven Webapp</name>
<!--專案主頁的URL, Maven產生的文件用 -->
<url>http://maven.apache.org</url>
<!--專案開發者屬性-->
<properties>
<!-- 檔案拷貝時的編碼 -->
<!-- 可以在後文用${}取出便於全域性控制,在很多情況下版本要統一如Spring -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.springframework.version>3.0.5.RELEASE</org.springframework.version>
<org.eclipse.jetty.version>8.0.3.v20111011</org.eclipse.jetty.version>
<!-- Hibernate版本 -->
<org.hibernate.version>3.6.8.Final</org.hibernate.version>
</properties>
<!--發現依賴和擴充套件的遠端倉庫列表。-->
<!--發現依賴和擴充套件的遠端倉庫列表。-->
<repositories>
<!--包含需要連線到遠端倉庫的資訊-->
<repository>
<!--遠端倉庫唯一識別符號。可以用來匹配在settings.xml檔案裡配置的遠端倉庫-->
<id>public</id>
<!--遠端倉庫名稱-->
<name>Public Repositories</name>
<!--遠端倉庫URL,按protocol://hostname/path形式-->
<url>http://192.168.101.23:8081/nexus/content/groups/public/</url>
</repository>
</repositories>
<!--該元素描述了專案相關的所有依賴。 這些依賴組成了專案構建過程中的一個個環節。它們自動從專案定義的倉庫中下載。要獲取更多資訊,請看專案依賴機制。-->
<dependencies>
<!--這裡一般有多個dependency-->
<dependency>
<!--依賴的group ID-->
<groupId>javax.mail</groupId>
<!--依賴的artifact ID-->
<artifactId>mail</artifactId>
<!--依賴的版本號。 在Maven 2裡, 也可以配置成版本號的範圍。-->
<version>1.4</version>
</dependency>
</dependencies>
<!--構建專案需要的資訊-->
<build>
<!--產生的構件的檔名-->
<finalName>gstd-wocpWeb</finalName>
<!-- 通過過濾功能解析資原始檔中的maven屬性 -->
<!--這個元素描述了專案相關的所有資源路徑列表,例如和專案相關的屬性檔案,這些資源被包含在最終的打包檔案裡。-->
<resources>
<!--這個元素描述了專案相關或測試相關的所有資源路徑-->
<resource>
<!--描述存放資源的目錄,該路徑相對POM路徑-->
<directory>src/main/resources</directory>
<!--是否使用引數值代替引數名。引數值取自properties元素或者檔案裡配置的屬性,檔案在filters元素裡列出。-->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<filtering>false</filtering>
</resource>
</resources>
<!-- 編譯Java程式碼外掛 -->
<!--使用的外掛列表 。-->
<plugins>
<!--plugin元素包含描述外掛所需要的資訊。-->
<plugin>
<!--外掛在倉庫裡的group ID-->
<groupId>org.apache.maven.plugins</groupId>
<!--外掛在倉庫裡的artifact ID-->
<artifactId>maven-compiler-plugin</artifactId>
<!--擴充套件配置項-->
<configuration>
<encoding>utf-8</encoding>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<!-- skip test -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${org.eclipse.jetty.version}</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<useFileMappedBuffer>false</useFileMappedBuffer>
<connectors>
<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
<port>${wocp.server.start.startport}</port>
<maxIdleTime>60000</maxIdleTime>
</connector>
</connectors>
<stopKey>${wocp.server.start.stopkey}</stopKey>
<stopPort>${wocp.server.start.stopport}</stopPort>
<systemProperties>
<systemProperty>
<name>org.mortbay.jetty.Request.maxFormContentSize</name>
<value>1000000</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
<!-- js、css壓縮 -->
<!-- 利用assembly外掛打包 -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assembly/package.xml</descriptor>
</descriptors>
<!--在構建生命週期中執行一組目標的配置。每個目標可能有不同的配置。-->
<executions>
<!--execution元素包含了外掛執行需要的資訊-->
<execution>
<id>make-assembly</id>
<phase>package</phase>
<!--配置的執行目標-->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</configuration>
</plugin>
</plugins>
</build>
<!-- 針對不同環境的profile -->
<!--在列的專案構建profile,如果被啟用,會修改構建處理-->
<profiles>
<!-- 開發配置 -->
<!--根據環境引數或命令列引數啟用某個構建處理-->
<profile>
<id>dev</id>
<properties>
<wocp.server.start.startport>9200</wocp.server.start.startport>
<wocp.server.start.stopport>9201</wocp.server.start.stopport>
<wocp.server.start.stopkey>stop</wocp.server.start.stopkey>
<bill.db.driver>oracle.jdbc.OracleDriver</bill.db.driver>
<bill.db.url>jdbc:oracle:thin:@192.168.101.23:1521:nfc</bill.db.url>
<bill.db.username>bill_center</bill.db.username>
<bill.db.passwd>bill</bill.db.passwd>
<shine.db.driver>oracle.jdbc.OracleDriver</shine.db.driver>
<shine.db.url>jdbc:oracle:thin:@192.168.101.23:1521:nfc</shine.db.url>
<shine.db.username>shine_center</shine.db.username>
<shine.db.passwd>shine</shine.db.passwd>
</properties>
</profile>
<!-- 連線測試庫的配置 -->
<profile>
<id>test</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<wocp.server.start.startport>5180</wocp.server.start.startport>
<wocp.server.start.stopport>5181</wocp.server.start.stopport>
<wocp.server.start.stopkey>stop</wocp.server.start.stopkey>
<bill.db.driver>oracle.jdbc.OracleDriver</bill.db.driver>
<bill.db.url>jdbc:oracle:thin:@192.168.1.66:1521:orcl</bill.db.url>
<bill.db.username>dev_bill_smc</bill.db.username>
<bill.db.passwd>abc</bill.db.passwd>
<shine.db.driver>oracle.jdbc.OracleDriver</shine.db.driver>
<shine.db.url>jdbc:oracle:thin:@192.168.1.66:1521:orcl</shine.db.url>
<shine.db.username>dev_shine_smc</shine.db.username>
<shine.db.passwd>abc</shine.db.passwd>
</properties>
</profile>
<!-- 生產配置 -->
<profile>
<id>product</id>
<properties>
</properties>
</profile>
</profiles>
</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/xsd/maven-4.0.0.xsd">
<!-- 指定了當前POM的版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 專案座標資訊 -->
<!-- 專案主標識,用於定義當前專案屬於的實際專案,格式與專案建立的包是一樣的,公司域名反寫-->
<groupId>com.jsun.demo</groupId>
<!-- 專案名或模組名或專案名+模組名組成 -->
<artifactId>demo-maven01</artifactId>
<!-- 當前專案版本號,一般由三個數字組成,第一個0表示大版本號,第二個0表示分支版本號,第三個1表示小版本號 -->
<!-- SNAPSHOT代表當前版本型別為快照版本,還有alpha內部版本、beta公測版本、release釋出版本、ga正式版本等 -->
<version>0.0.1-SNAPSHOT</version>
<!-- maven打包方式,預設為jar,還有:pom,maven-plugin,war,rar,zip -->
<packaging>jar</packaging>
<!-- 用在子模組中,實現對父模組的繼承 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
</parent>
<!-- 聚合多個maven專案,同時對所有聚合專案進行編譯 -->
<modules>
<module></module>
</modules>
<!-- 專案描述名,url,詳細描述,產生專案文件使用 -->
<name>Maven01</name>
<url>http://maven.apache.org</url>
<description>測試maven專案</description>
<!-- 開發人員列表,專案釋出使用 -->
<developers>
<!-- 某個專案開發者的資訊 -->
<developer>
<!-- 專案開發者的唯一識別符號 -->
<id>001</id>
<!-- 專案開發者的全名 -->
<name>jsun</name>
<!-- 專案開發者的email -->
<email> [email protected] </email>
<!-- 專案開發者的主頁的URL -->
<url />
<!-- 專案開發者在專案中扮演的角色,角色元素描述了各種角色 -->
<roles>
<role>developer</role>
</roles>
<!-- 專案開發者所屬組織 -->
<organization>com-jsun</organization>
<!-- 專案開發者所屬組織的URL -->
<organizationUrl> http://demo.jsun.com/jsun</organizationUrl>
</developer>
</developers>
<!-- 許可證資訊, -->
<licenses>
<license>
<name></name>
<!-- 官方的license正文頁面的URL -->
<url></url>
<!-- 專案分發的主要方式:repo,可以從Maven庫下載,manual,使用者必須手動下載和安裝依賴 -->
<distribution></distribution>
<!-- 關於license的補充資訊 -->
<comments></comments>
</license>
</licenses>
<!-- 專案所屬組織資訊 -->
<organization>
<name></name>
<url></url>
</organization>
<!-- 屬性列表,相當於定義的公共常量,引用方式比如:${project.build.sourceEncoding} -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>3.8.1</junit.version>
</properties>
<!-- 依賴列表 -->
<dependencies>
<!-- 具體依賴項,下面主要包含依賴的座標、型別、範圍等資訊 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>1.2.6</version>
<!-- 依賴的型別 -->
<type>jar</type>
<!-- 專案如果要使用某個框架或依賴,需要把相關jar包引用到classpath中,maven專案提供了三個classpath:編譯、測試、執行 -->
<!-- 依賴的範圍用於控制依賴於三種classpath關係的,包括:compile、provided、runtime、test、system、import -->
<!--
compile:預設範圍,編譯、測試、執行都有效
provided:編譯和測試有效,最後執行不會被加入
runtime:在測試和執行的時候有效,編譯不會被加入,比如jdbc驅動jar
test:測試階段有效,比如junit
system:與provided一致,編譯和測試階段有效,但與系統關聯,可移植性差
import:匯入的範圍,它只是用在dependencyManagement中,表示從其它的pom中匯入dependency的配置
-->
<!-- 表示當前依賴只能在測試程式碼中引用使用,在主程式碼中引用使用則報錯 -->
<scope>test</scope>
<!-- 排除依賴傳遞列表,比如A依賴B,B依賴C,但是A並沒有使用C的功能,可以把C排除-->
<exclusions>
<exclusion></exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!-- 主動設定禁止自己被傳遞,只在當前專案中使用 -->
<optional>true</optional>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<!-- 在相同版本下針對不同的環境或者jdk使用的jar,如果配置了這個元素,則會將這個元素名在加在最後來查詢相應的jar,
具體解釋檢視:http://www.cnblogs.com/lovingprince/archive/2010/09/19/2166273.html -->
<classifier>jdk15</classifier>
<version>2.4</version>
</dependency>
</dependencies>
<!-- 使用dependencyManagement標籤管理依賴,實際管理的是依賴的版本號,讓
所有子專案中引用對應依賴而不用顯式的列出版本號;
依賴並不會在當前專案引入 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 構建外掛 -->
<build>
<!--
Maven定製化打包後的包名
Maven預設的包名為:<finalName>${project.artifactId}-${project.version}</finalName>
定製化想要的包名,如加上時間戳:<finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
-->
<finalName>myProject</finalName>
<!-- 外掛列表 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 外掛管理列表,與dependencyManagement標籤作用相似,管理外掛版本號,讓子專案繼承使用 -->
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 外掛擴充套件配置 -->
<!-- 更詳細的例子:http://my.oschina.net/zh119893/blog/276090 -->
<configuration>
<!-- 原始碼編譯版本 -->
<source>1.7</source>
<!-- 目標平臺編譯版本 -->
<target>1.7</target>
<!-- 設定編譯字符集編碼 -->
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
所以經過總結可以看出Maven的pom.xml中大致有以下幾種:
<properties> //配置全域性統一的配置
<repositories> //配置遠端倉庫 但是一般使用預設maven
<dependencies> //用到最多的專案依賴
<build> //構建專案涉及到的 <resources>,<plugin>等
如何建立兩個Maven專案之間的依賴關係
如果A專案依賴B專案,開啟A專案的pom.xml 在期中錄入B專案的資訊即可
<dependencies>
<dependency>
<groupId>xxxx</groupId>
<artifactId>mavenPom</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
Maven專案的依賴關係有哪些
專案的依賴關係主要分為三種:依賴,繼承,聚合
附錄
在實際使用呼叫自己專案依賴時需要先進行
mvn install