Maven学习笔记(5)maven使用的一些问题

插件和依赖的区别

依赖:运行时开发时都需要用到的jar包,比如项目中需要一个Json的jar包,就要添加一个依赖,这个依赖在项目运行时也需要,因此在项目打包时需要把这些依赖也打包进项目里。

插件:在项目开的发时需要,但是在项目运行时不需要,因此在项目开发完成后不需要把插件打包进项目中,比如打包的时候也需要用到maven-jar-plugin这个插件,但是真正的项目包中是没有maven-jar-plugin这个包的,编译结束后就没用了,所以项目打包时并不需要把插件放进去。

plugins和pluginManagement

pluginManagement是表示插件声明,即你在项目中的pluginManagement下声明了插件,Maven不会加载该插件,pluginManagement声明可以被继承。

pluginManagement一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。

plugins就是直接引入一个plugin,而且可以绑定到Maven相关的生命周期上。

一般第一次创建maven工程的时候会直接加上pluginManagement,很容易造成误解,容易将配置插件的时候放在了pluginManagement标签中,造成了不能使用的现状。

父pom:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <attach>true</attach>
            </configuration>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</pluginManagement>

子pom

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
    </plugin>
</plugins>

但是如果只是想单独在一个小工程中使用某个插件的话,就不用这么麻烦,正常加入groupid,artififactid和version就行了,如下:

<?xml version="1.0" encoding="UTF-8"?>

<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>

  ...
  <build>
    <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>org.sonatype.haven.HavenCli</mainClass>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
    </plugins>
  </build>

</project>

打包的时候遇到的一些问题

一般常用的是打包成jar包或者war包,使用的是maven-jar-plugin 来打包自己编写的java程序,一般是src/main/java中代码,但是一般还有很多依赖项需要一起放入jar包或者war包中,但是将依赖包放入这jar或者war中有些许不同,但是容易让人造成误解。

war包

打成war吧,只需要在控制好依赖的范围:compile、test、provided,默认采用 compile。默认或者使用compile都会自动将依赖放入war中的WEB-INF/lib/中,不需要其它的插件做辅助。
在这里插入图片描述

jar包

一般都以为直接修改依赖中scope标签,不仅如此,还要使用其它的插件才能将其它的依赖放入生成的jar中。

maven-jar-plugin // 默认打包插件,用来创建工程中的jar包,一般是/src/main/java中的代码
maven-shade-plugin // 打可执行包,executable(fat) jar,将其它的依赖的jar包放入生成的jar中

猜你喜欢

转载自blog.csdn.net/liutao43/article/details/114171242