通过maven将应用打成jar包之后,可以通过java -jar ***.jar来执行,会运行指定的main方法,主要是 MANIFEST.MF 中指定的 main 方法;那么如果有多个main方法的时候如何运行指定的main方法哪,可以通过下面命令去执行
java -classpath ****.jar ****.****.className [args]
1:指定main方法
(1)maven打包之后,通过MANIFEST.MF指定main方法
java -jar mplus-service-jar-with-dependencies.jar
(2)如果是maven的话,可以在pom.xml文件指定main方法
-
<build>
-
<plugins>
-
<plugin>
-
<groupId>org.apache.maven.plugins</groupId>
-
<artifactId>maven-assembly-plugin</artifactId>
-
<version>2.3</version>
-
<configuration>
-
<appendAssemblyId>false</appendAssemblyId>
-
<descriptorRefs>
-
<descriptorRef>jar-with-dependencies</descriptorRef>
-
</descriptorRefs>
-
<archive>
-
<manifest>
-
<addClasspath>true</addClasspath>
-
<classpathPrefix>lib/</classpathPrefix>
-
<mainClass>io.test.main.MainOfDiskMount</mainClass>
-
</manifest>
-
</archive>
-
</configuration>
-
<executions>
-
<execution>
-
<id>make-assembly</id>
-
<phase>package</phase>
-
<goals>
-
<goal>assembly</goal>
-
</goals>
-
-
</execution>
-
</executions>
-
</plugin>
-
</plugins>
-
</build>
主要是这里面的mainfest代码块;mainClass中指定执行的main方法的包名+类名;然后指定maven package命令,可以看到打包出来的jar中的META-INF中MANIFEST.MF的内容添加了一项内容
这里面就是我们在pom.xml中指定的main方法;然后打包成jar运行的时候,如果要添加参数,直接添加在后面就可以了;
java -jar ****.jar aaa bbb ccc
2:在MANIFEST.MF中指定,有多个main方法,指定特定main方法运行
java -cp mplus-service-jar-with-dependencies.jar com.smbea.dubbo.bin.Console aaa bbb
java -classpath ****.jar ****.****.className [args]
java -cp命令介绍
java -cp .;c:\dir1\lib.jar Test
-cp和-classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上";"分隔,linux上是":"分隔。不支持通配符,需要列出所有jar包,用"."代表当前路径。虽然现在都有eclipse之类的IDE了,但有时候后会手工编译和运行一些程序,很多人包括多年开发经验的人都不知道怎么在命令行参数运行类。
3.指定依赖包启动
zookeeper-learn-1.0-SNAPSHOT.jar是执行的jar包;
(1)java -classpath .;E:\local\lib\zookeeper-3.4.10.jar;E:\local\lib\zookeeper-learn-1.0-SNAPSHOT.jar;E:\local\lib\slf4j-api-1.6.1.jar com.zhujq.learn.zookeeperdemo.watcher.Master
(2)java -classpath ‘.;E:\local\lib\* ’ com.zhujq.learn.zookeeperdemo.watcher.Master
(3)编译:javac -Djava.ext.dirs=./lib Test.java 或 javac -Djava.ext.dirs=D:/javacode/lib
运行:java -Djava.ext.dirs=./lib Test
总结:通过maven 把项目打包成jar,然后运行main方法,有两种情况,一种是在MANIFEST.MF中指定运行的main方法;另外一种是通过命令行指定运行的main方法的包;同时可以添加对应的参数传递到main方法中去;
参考:
https://blog.csdn.net/xiaoguangtouqiang/article/details/82182654