我使用“spring-boot-maven-plugin”将我的spring启动应用程序打包到一个jar文件中,我需要指向一个驻留在my-internal-lib.jar中的mainClass。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.2.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>my.internal.lib.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
生成jar的文件夹结构如下:
-- com
-- my
-- spring
-- boot
RestRunner.java
App.java
-- lib
-- my-internal-lib.jar (my.internal.lib.Main.java)
-- META-INF
-- maven
-- MANIFEST.MF
-- org
application.properties
我的代码是这样的:
package my.internal.lib;
public class Main {
public static void main(String[] args){
new RestRunner().start(args);
}
}
package com.my.spring.boot;
public class RestRunner{
public boolean start(String[] args){
SpringApplication.run(App.class, args);
}
}
package com.my.spring.boot;
@SpringBootApplication(scanBasePackages = {"com.my.spring.boot"})
public class App {}
我的MANIFEST.MF如下:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: ...
Start-Class: my.internal.lib.Main
Spring-Boot-Version: 1.3.2.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_112
Main-Class: org.springframework.boot.loader.JarLauncher
但是使用命令“java -cp myjar.jar my.internal.lib.Main”运行jar时出现此错误:
java.lang.ClassNotFoundException: my.internal.lib.Main
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
我的内部jar是否在classpath中?如果没有,如何添加它?
答案 0 :(得分:1)
使用“java -jar jarname”解决了问题。 感谢@ Alexander.Furer