java 两种启动java程序的方法:java -jar启动java程序 和 java -cp 启动java程序
java -jar:
默认情况下,Spring Boot 可执行主类是通过查找具有 public static void main(String[])
任务类路径目录中的方法。
如果您正在使用 spring-boot-starter-parent
,我们可以通过覆盖 start-class
财产在 pom.xml
.例如,要命名主类,请在您的 pom.xml
:
1 2 3 | <properties> <start-class>com.mycorp.starter.HelloWorldApplication</start-class> </properties> |
如果您不使用 spring-boot-starter-parent
,那么您可以应用 start-class
财产给 mainClass
的配置参数 spring-boot-maven-plugin
.
1 2 3 4 5 6 7 8 9 10 11 | <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>myPackage.HelloWorld</mainClass> </configuration> </plugin> </plugins> </build> |
java -cp xxx java_class
-cp == -classpath即指定路径加入classpath里,以便java能从classpath里找到想要运行的类
当运行java -cp xxx.jar com.yyy 时, 常遇到的问题是“错误: 找不到或无法加载主类”
主要原因就是在指定的classpath里面, 找不到要运行的java类。但是你要运行的类确实已经打到jar里面了的呀。
对于某个x.y.z.HelloJava的类, 在用java运行时, 查找的路径是x/y/z/HelloJava.class
怎么验证呢?可以使用jar xvf xxx.jar将jar解压缩,看看得到的目录结果是不是你所指定的com/yyy(对应com.yyy)的结果,尤其是使用"spring-boot-maven-plugin" build plugin打的jar, 实际的路径是“BOOT-INF/classes/com/yyy”,可以看到二者的路径是不同的,所以会报“找不到或无法加载主类”的错误。
此时, 使用 java -cp BOOT-INF/classes/ com.yyy 就可以正常运行java类了。