我在从一个JAR文件中运行多个不同的类时遇到问题.我知道我可以将JAR中的一个类设置为将在命令后运行的Main类java -jar myjar.jar,但我想要的是:
java -jar myjar.jar MyClass
Run Code Online (Sandbox Code Playgroud)
是否有可能以这种方式执行此操作,或者我是否必须创建多个JAR(每个用于一个可运行的类),或者更好地创建将运行我的其他类传递给命令行参数的"manager"类?
我正在寻找文档或参考,但我找不到任何.
Spring Boot中有三个启动器:JarLauncher/PropertiesLauncher/WarLauncher.对于可执行jar,默认情况下将使用JarLauncher.现在我想使用PropertiesLauncher,以便我可以使用外部类路径.我怎么能指定那是spring boot gradle插件?
根据这个doc D.3.1 Launcher清单的 D3.1 ,我可以在MANIFEST.MF中指定主类,如下所示:
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.mycompany.project.MyApplication
Run Code Online (Sandbox Code Playgroud)
但是,在Spring Boot Gradle中,以下代码片段实际指定了Start-Class,而不是Main-Class:
springBoot {
mainClass = "com.sybercare.HealthServiceApplication"
}
Run Code Online (Sandbox Code Playgroud)
我是否需要手动创建MANIFIEST.MF或者有更好的方法来执行此操作?
谢谢!
我正在尝试使用弹簧启动属性启动器
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.springframework.boot.loader.PropertiesLauncher</mainClass>
</manifest>
<manifestEntries>
<Start-Class>com.att.hadoop.loader.run.Application</Start-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
Run Code Online (Sandbox Code Playgroud)
当我查看清单文件时,它看起来像这样
$ unzip -q -c hdfsloader-0.0.1-SNAPSHOT.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Built-By: aq728y
Build-Jdk: 1.7.0_25
Start-Class: org.springframework.boot.loader.PropertiesLauncher
Created-By: Apache Maven 3.1.0
Spring-Boot-Version: 1.0.0.RC1
Main-Class: org.springframework.boot.loader.JarLauncher
Archiver-Version: Plexus Archiver
Run Code Online (Sandbox Code Playgroud)
关于为什么我的mainclass和startclass错误的任何想法
我想把它设置为
Main-Class:org.springframework.boot.loader.PropertiesLauncher
Start-Class:com.att.hadoop.loader.run.Application
在Spring Boot中,需要指定一个主类,它是应用程序的入口点。通常,这是一个具有标准 main 方法的简单类,如下所示;
@SpringBootApplication
public class MySpringApplication {
public static void main(String [] args) {
SpringApplication.run(MySpringApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当应用程序运行时,该类被指定为主入口点。
但是,我想使用不同的主类运行我的代码,使用配置来定义它,并且不使用不同的jar!(我知道重建 jar 将使我能够指定一个替代主类,但这实际上给了我两个应用程序,而不是一个!那么,我如何才能利用一个jar具有两个主类的应用程序,并通过 Spring 选择要使用的一个应用程序 application.yml文件?