Java启动命令与Maven打包设置

一、Java启动命令

java程序的启动方式有三种:

1、java -jar

  生成的jar包中,manifest文件定义了Main Class,可使用该命令

java -jar test.jar

2、java -cp

  生成的jar包中,无Main Class配置,可使用该命令

java -cp test.jar cn.matt.Test

  该命令也可从class文件中启动java程序,对于依赖的jar包,须明确列出,并用分号(windows)或冒号(Linux)分隔

java -cp ./target/classes;test2.jar cn.matt.Test

3、java -Djava.ext.dirs

  当jar中包含依赖包时,使用java -cp并不方便,此时可使用该命令,只需指定依赖包目录

java -Djava.ext.dirs=. cn.matt.maven_test.App

 

二、Java打包设置

使用Maven打包,默认情况下,生成的jar包不能直接运行(无Main Class),并且不包含依赖jar包

指定Main Class,并包含依赖的jar包配置:

<build>
     <plugins>
         <plugin>
             <artifactId>maven-assembly-plugin</artifactId>
             <configuration>
                 <appendAssemblyId>false</appendAssemblyId>
                 <descriptorRefs>
                     <descriptorRef>jar-with-dependencies</descriptorRef>
                 </descriptorRefs>
                 <archive>
                     <manifest>
                         <mainClass>cn.matt.maven_test3.App</mainClass>
                     </manifest>
                 </archive>
             </configuration>
             <executions>
                 <execution>
                     <id>make-assembly</id>
                     <phase>package</phase>
                     <goals>
                         <goal>assembly</goal>
                     </goals>
                 </execution>
             </executions>
         </plugin>
     </plugins>
 </build>

 

三、springboot 打包设置

1、默认将依赖打到一个Jar:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>2.1.9.RELEASE</version>
  <configuration>
    <mainClass>com.notes.JavaNotesApplication</mainClass>
    <layout>JAR</layout>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>repackage</goal>
      </goals>
      <configuration>
        <attach>false</attach>
      </configuration>
    </execution>
  </executions>
</plugin>

2、springboot支持瘦身包,通过 -Dloader.path 指定依赖包或配置文件路径

配置方式参见:springboot 打包插件去除jar包瘦身

 

四、maven仓库

maven本地仓库从远处同步后会在_remote.repositories文件中记录同步仓库名。_remote.repositories设计目的为:规避不同仓库存在同名非同一组件加载错误的问题。编译项目时,maven从优先从本地仓库拉取,拉取前会判断_remote.repositories存在&&当前仓库id或镜像id在_remote.repositories中无记录,false则忽略本地文件并从远程仓库重新拉取。

强制使用本地文件的方法有三种:

1、忽略_remote.repositories (推荐)

mvn clean install -llr  
或
mvn clean install -Dmaven.legacyLocalRepo=true

2、删除_remote.repositories

3、修改settings.xml -> mirrorId 为_remote.repositories中已记录的名称

 

参考:

Maven打包含有Main方法jar并运行

java命令行运行jar里的main类

Eclipse中通过Maven更改jdk设置

 

posted @ 2018-04-02 17:39  Matt_Cheng  阅读(835)  评论(0编辑  收藏  举报