1. 程式人生 > 其它 >Maven中pom.xml標籤

Maven中pom.xml標籤

技術標籤:其他

外掛標籤:plugin

外掛:maven-compiler-plugin

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
    <encoding>UTF-8</
encoding
>
</configuration> </plugin>

maven是個專案管理工具,maven-compiler-plugin的配置,就是用來告訴它我們的程式碼要使用什麼樣的jdk版本編譯,如果不指定版本他就會使用預設的jdk版本來進行處理,maven的預設編譯使用的jdk版本很低,這樣就容易出現版本不匹配,以至於可能導致編譯不通過的問題

下面展示關於maven-compiler-plugin的完整配置

<plugin>                                                                                                                                      
    <!-- 指定maven編譯的jdk版本,如果不指定,maven3預設用jdk 1.5 maven2預設用jdk1.3 -->
<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <
version
>
3.1</version> <configuration> <!-- 一般而言,target與source是保持一致的,但是,有時候為了讓程式能在其他版本的jdk中執行(對於低版本目標jdk,原始碼中不能使用低版本jdk中不支援的語法),會存在target不同於source的情況 --> <source>1.8</source> <!-- 原始碼使用的JDK版本 --> <target>1.8</target> <!-- 需要生成的目標class檔案的編譯版本 --> <encoding>UTF-8</encoding><!-- 字符集編碼 --> <skipTests>true</skipTests><!-- 跳過測試 --> <verbose>true</verbose> <showWarnings>true</showWarnings> <fork>true</fork><!-- 要使compilerVersion標籤生效,還需要將fork設為true,用於明確表示編譯版本配置的可用 --> <executable><!-- path-to-javac --></executable><!-- 使用指定的javac命令,例如:<executable>${JAVA_1_4_HOME}/bin/javac</executable> --> <compilerVersion>1.3</compilerVersion><!-- 指定外掛將使用的編譯器的版本 --> <meminitial>128m</meminitial><!-- 編譯器使用的初始記憶體 --> <maxmem>512m</maxmem><!-- 編譯器使用的最大記憶體 --> <compilerArgument>-verbose -bootclasspath ${java.home}\lib\rt.jar</compilerArgument><!-- 這個選項用來傳遞編譯器自身不包含但是卻支援的引數選項 --> </configuration> </plugin>

引自:https://blog.csdn.net/liupeifeng3514/article/details/80236077

在指定JDK版本的時候,其實也有很多種方式:
方式一:

<properties>
    <!-- maven-compiler-plugin 將會使用指定的 JDK 版本將 java 檔案編譯為 class 檔案(針對編譯執行環境) -->
    <maven.compiler.target>1.8</maven.compiler.target>
    <!-- maven-compiler-plugin 將會使用指定的 JDK 版本對原始碼進行編譯(針對編譯執行環境) -->
	<maven.compiler.source>1.8</maven.compiler.source>
<properties>

方式二:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <!-- 同【方式一】的 maven.compiler.target -->
                <source>1.8</source>
                <!-- 同【方式一】的 maven.compiler.source -->
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

方式三:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>
<properties>
    <java.version>1.8</java.version>
</properties>

方式三的有幾個前提條件:

  1. 專案為一個 SpringBoot 工程
  2. 專案的 POM 繼承了 spring-boot-starter-parent(其實spring-boot父標籤已經幫你我們寫好了,可以點進去看)

引自:https://blog.csdn.net/yangchao1125/article/details/100585116

外掛:maven-source-plugin

<plugin>
  <artifactId>maven-source-plugin</artifactId>
  <configuration>
    <attach>true</attach>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>jar-no-fork</goal>
      </goals>
    </execution>
  </executions>
</plugin>

在很多情況下,需要對於Maven工程的原始碼進行原始檔的打包,可以利用maven-source-plugin外掛來完成。利用Maven的Source外掛,對Maven工程的原始碼進行打各種包。使用者可以根據需要將任何外掛目標繫結到任何生命週期的階段,如:將maven-source-plugin的jar-no-fork目標繫結到default生命週期的package階段,這樣,以後在執行mvn package命令打包專案時,在package階段之後會執行原始碼打包。
execution下可配置phase屬性, 意思是在什麼階段打包原始檔。如install在執行mvn install時打包原始碼

在這裡插入圖片描述
補充:
執行 mvn install,maven會自動將source install到repository 。
執行 mvn deploy,maven會自動將source deploy到remote-repository 。
執行 mvn source:jar,單獨打包原始碼。
注意:在多專案構建中,將source-plugin置於頂層或parent的pom中並不會發揮作用,必須置於具體專案的pom中。

引自:https://www.cnblogs.com/yantz/p/4463374.html

標籤:packaging

例如pom.xml的一段配置:

<groupId>com.alibaba.scrm</groupId>
<artifactId>scrm-server-share</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>

pom:該方式主要是管理maven專案的,裡面不放原始碼,用於繼承或聚合的maven模組中
war:會將專案打成war包,對於web專案來說,通常會設定為war (如果需要把專案包放到tomcat來啟動,就要使用這種)
jar:打成jar包,對於普通java專案來說,通常會設定為jar(比如springboot內建了tomcat,通過java命令就可以啟動)

標籤 dependency

<dependency>
	<groupId>com.alipay.sdk</groupId>
	<artifactId>alipay-sdk-java</artifactId>
	<version>4.9.100.ALL</version>
</dependency>

描述:我們要使用的jar包的gav資訊放到這裡,這樣maven就可以自動下載相關jar包了。

標籤 dependency-scope

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>servlet-api</artifactId>
	<version>2.5</version>
	<scope>provided</scope>
</dependency>

在dependency標籤下有一個scope標籤,該標籤的作用是可以設定依賴在專案的使用階段,通常來說,專案包含:編譯、執行、測試、打包這些不同的階段。

  • compile:是預設值,適用於所有階段,編譯、執行、測試、打包都會包含到專案中。
  • test:只在測試時使用,用於編譯和執行測試程式碼,不會隨專案釋出,
    例如junit,如果不修改junit依賴中的scope,我們只能在test目錄下使用junit相關類。
  • runtime:只在執行時使用,例如mysql的JDBC驅動依賴,我們在編寫程式碼的時候使用java.sql包下的類即可,在執行的時候才會用到該依賴,適用執行和測試階段。
  • provided:編譯、執行階段使用,打包時不會包含該依賴,例如servlet.jar,這個包在
    tomcat容器中已經提供了,因此打包時servlet.jar 無需包含在專案中。
  • system:類似provided,需要顯式提供包含依賴的jar的路徑(使用systemPath標籤),Maven不會在倉庫中查詢它。使用較少

標籤 dependency-systemPath

<dependency>
	<groupId>org.apache</groupId>
	<artifactId>log4j</artifactId>
	<version>1.2.17</version>
	<scope>system</scope>
	<systemPath>${project.basedir}/src/main/webapp/WEB-INF/lib/log4j-1.2.17.jar</systemPath>
</dependency>

引入非本地倉庫中的jar包,有時候我們需要使用一些jar包,但是這些jar在maven倉庫中並不存在,此時可以使使用下面方式引用,以log4j為例:

注意:如果這樣引入非本地參考的jar包,在使用maven打包時是不會將該jar打包入專案中的,所以還需要新增下面內容:

<build>
  <resources>
    <resource>
      <directory>${project.basedir}/lib</directory>
      <targetPath>BOOT-INF/lib/</targetPath>
      <includes>
        <include>**/*.jar</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <targetPath>BOOT-INF/classes/</targetPath>
    </resource>
  </resources>
</build>

標籤 properties

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <jdk.version>1.8</jdk.version>
</properties>
......
  <source>${jdk.version}</source>

有時候對於同一個技術需要編寫很多個依賴引入相關的jar包,每個依賴中都要填寫版本號,倘若更換版本號的話,修改的地方比較多,所以可以使用properties統一管理版本號,logback-version可以自由命名,通過${}方式進行引用:

標籤 build

Label	Description
sourceDirectory	Java檔案目錄
testSourceDirectory	測試Java檔案目錄
resources	資原始檔目錄
testResources	測試資原始檔
outputDirectory	原始檔輸入出目錄
testOutputDirectory	測試檔案輸出目錄
finalName	指出最終打包的包名
defaultGoal	指定預設的引數,當執行maven命令時沒有指定引數是使用預設引數,如compile、install
filters	使用配置檔案中的值替換專案中的佔位符

本文引自:http://www.monkey1024.com/javaweb/2168