插件标签: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>
方式三的有几个前提条件:
- 项目为一个 SpringBoot 工程
- 项目的 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