Maven常用命令

基于Maven构建项目项目时,有一些常见的命令是我们必须要熟练使用的,包括:编译、打包(JAR)、部署等

配置Maven编译时使用的JDK版本

使用Maven之前强烈建议手动配置Maven编译时实用的JDK版本,有时候你在Eclipse中指定了编译器使用的JDK版本,但是当使用Maven进行编译时就是不通过,可能就算两者使用的编译器JDK版本不一样,
为了保险起见,手动在两个地方指定配置:

  1. 找到Maven的安装目录下的conf目录下的settings.xml文件,在其中的profiles节点下添加如下配置:
<profile>    
    <id>jdk-1.8</id>    
    <activation>    
      <activeByDefault>true</activeByDefault>    
      <jdk>1.8</jdk>    
    </activation>    
    <properties>    
        <maven.compiler.source>1.8</maven.compiler.source>    
        <maven.compiler.target>1.8</maven.compiler.target>    
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>    
    </properties>    
</profile>
  1. 当前项目的POM文件中,在plugins节点下添加如下配置:
<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>

或则,在属性properties中指定

<properties>
  <maven.compiler.source>1.8</maven.compiler.source>
  <maven.compiler.target>1.8</maven.compiler.target>
</properties>

当然,最好也将使用的IDE中的编译器使用的JDK的版本和上面指定一样,例如Eclipse中


image.png

多模块的Maven项目打包

当项目比较庞大时,往往会将它分为几个module,module之间可能存在依赖,即一个module引用另一个module,例如A依赖B模块,则在A模块的POM文件中会有如下声明:

<dependency>
    <groupId>com.xxx.xxx.common</groupId>
    <artifactId>common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

此时,在编译A模块的时候如果找不到B模块,就会报错,可以将B模块的JAR安装在本地Repository中,也就是使用mvn intsall命令,例如:

mvn install:install-file -Dfile=D:/projects/xxx/target/common-1.0-SNAPSHOT.jar -DgroupId=com.xxx.xxx.common -DartifactId=common -Dversion=1.-SNAPSHOT -Dpackaging=jar

当然,你也可以直接使用mvn install命令,maven会自动将当前目录下的JAR添加至你的Repository中
此时会将common-1.0-SNAPSHOT.jar添加至你的本地Repository,就可以正确的引用并编译了

Maven打包后的JAR找不到主类

找到项目的POM文件,在build的plugins节点下添加如下配置,手动指定主类:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <archive>
            <manifest>
                 <mainClass>主类所在的路径</mainClass>
                 <addClasspath>true</addClasspath>
                 <classpathPrefix>lib/</classpathPrefix>
            </manifest> 
          </archive>
      </configuration>
</plugin>

Maven打包时包含或者不包含依赖的JAR

打包时不包含依赖的JAR

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <archive>
            <manifest>
                 <mainClass>主类所在的路径</mainClass>
                 <addClasspath>true</addClasspath>
                 <classpathPrefix>lib/</classpathPrefix>
            </manifest> 
          </archive>
      </configuration>
</plugin>

但是,需要将所依赖的JAR放在当前JAR所在目录lib目录下,如果依赖的JAR比较多,可以使用命令进行复制

mvn dependency:copy-dependencies -DoutputDirectory=D:/projects/xxx/dataServer/target/lib  -DincludeScope=runtime  

打包时包含所有依赖的JAR

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>主类所在的路径</mainClass>
            </manifest> 
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
</plugin>

然后使用命令mvn assembly:assembly进行打包,但是,这样打出来的JAR会很大很大

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容