项目中常用 Maven 插件食用

本文详细解析Maven中的关键插件,包括maven-compiler-plugin、maven-bundle-plugin等,阐述如何设置Java编译版本,配置资源文件过滤及依赖复制,以及执行测试和打包流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1 maven maven-compiler-plugin

1) Setting the -source and -target of the Java Compiler

2)compilerArguments

3)${path.separator}

2 maven-bundle-plugin

3 maven-source-plugin,maven-javadoc-plugin

1)执行maven命令,mvn clean package,执行完成后你就会看到如下图所示:

4 maven-surefire-plugin

5 maven-dependency-plugin

6 maven-jar-plugin

7 maven-resources-plugin(重点)

8 maven-assembly-plugin (不理解  以前老大讲过忘了...记录一下  万一记起来了呢)

1)assembly文件


1 maven maven-compiler-plugin

maven打包pom文件节点在windows和linux下的格式差异:

<plugin>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
      <source>1.8</source>
      <target>1.8</target>
      <compilerArguments>
         <verbose></verbose>
         <bootclasspath>
            ${JAVA_HOME}/jre/lib/rt.jar${path.separator}${JAVA_HOME}/jre/lib/jce.jar
         </bootclasspath>
      </compilerArguments>
   </configuration>
</plugin>

 

1) Setting the -source and -target of the Java Compiler

 设置这两个参数去修改jdk版本

 <source>1.8</source> <!-- 源代码使用的开发版本 --> 

<target>1.8</target> <!-- 需要生成的目标class文件的编译版本 -->

2)compilerArguments

 <!-- 这个选项用来传递编译器自身不包含但是却支持的参数选项 -->

maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题。例如代码中要是使用上了jdk1.7的新特性,但是maven在编译的时候使用的是jdk1.6的版本,那这一段代码是完全不可能编译成.class文件的。为了处理这一种情况的出现,在构建maven项目的时候,我习惯性第一步就是配置maven-compiler-plugin插件。

3)${path.separator}

${path.separator}这个分隔符,在Windows系统下是“;”分号,在Linux下是“:”冒号。 
为了使打包时自动选择,可以使用${path.separator}

2 maven-bundle-plugin

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>

<extensions>true</extensions>
    <version>3.0.1</version>
</plugin>

maven-source-plugin,maven-javadoc-plugin

<build>
    <pluginManagement>
        <plugins>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.2.1</version>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-javadoc-plugin</artifactId>
    <version>2.9.1</version>
</plugin>

  </plugins>
</pluginManagement>


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

1)执行maven命令,mvn clean package,执行完成后你就会看到如下图所示:

看到上面的图后,说明maven通过sourse,javadoc插件生产对应项目的源码包和文档包成功,如果你还需要发布到自己的私服,那么就再执行一条命令:mvn deploy就可以发布到你自己的私服上了,这样同项目组的人员就可以查看你的项目的源码和文档了

4 maven-surefire-plugin

如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了。maven-surefire-plugin是maven里执行测试用例的插件,不显示配置就会用默认配置。这个插件的surefire:test命令会默认绑定maven执行的test阶段。

 

最简单的配置方式就不配置或者是只声明插件。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
</plugin>

这个时候maven-surefire-plugin会按照如下逻辑去寻找JUnit的版本并执行测试用例。

5 maven-dependency-plugin

<!--
 copy dependencies to target/lib directory on package phase
-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.8</version>
</plugin>

用于复制依赖的jar包到指定的文件夹里

maven-jar-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
</plugin>

打成jar时,设定manifest的参数,比如指定运行的Main class,还有依赖的jar包,加入classpath中

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>/data/lib</classpathPrefix>
                <mainClass>com.zhang.spring.App</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

7 maven-resources-plugin(重点)

https://blog.youkuaiyun.com/u014515854/article/details/79166061

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
</plugin>

 <resources>  
           <resource>  
       <!--目标文件:需要操作的资源目录-->
               <directory>src/main/resources/</directory>  
               <filtering>true</filtering>  
               <includes>  
       <!--目标文件:需要操作的资源目录下的properties为后缀的文件其他的后缀文件不会被打包-->
                   <include>**/*.properties</include>  
               </includes>  
           </resource>  
           <resource>  
               <directory>src/main/resources/</directory>  
               <filtering>false</filtering>  
               <includes>  
                   <include>**/*.xml</include>  
               </includes>  
           </resource>  

       </resources>  

resource的filtering属性用来表示资源文件中的占位符是否需要被替换,true为需要替换。这个不写的话就等着抓脑袋吧。。。。

上面的定义是所有的.properties文件中的EL表达式占位符都会在打包时动态替换,所有的.xml文件则不会替换占位符。

8 maven-assembly-plugin (不理解  以前老大讲过忘了...记录一下  万一记起来了呢)

<plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>2.2-beta-5</version>
    <configuration>
        <descriptor>src/main/assembly/assembly.xml</descriptor>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

1)assembly文件

<assembly>
    <id>assembly</id>
    <formats>
        <format>tar.gz</format>
        <format>dir</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.build.directory}/jccfc-dubbo/META-INF/assembly/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>${profiles.dir}/${env}</directory>
            <outputDirectory>conf</outputDirectory>
            <fileMode>0644</fileMode>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/libs</directory>
            <outputDirectory>lib</outputDirectory>
        </fileSet>
    </fileSets>
    <dependencySets>
        <dependencySet>
            <outputDirectory>lib</outputDirectory>
        </dependencySet>
    </dependencySets>
</assembly>

箭头指向的都是同一个东西或者包含在打包里面

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值