FindClass 因 prunsrv 和 springboot 而失败?
FindClass failed with prunsrv & springboot?
我试图按照 here 的说明 运行 我的 Spring 将 Web 服务作为 windows 服务启动。如果我开始指向 org.springframework.boot.loader.JarLauncher,那么我的 Web 服务将启动并运行,但是当我尝试指向我添加的 Bootstrap class 时,我会收到一条 "FindClass com/mycompany/Bootstrap failed" 消息。所以 prunsrv 可以找到 SpringBoot classes 但找不到我的 classes.
有什么建议吗?使用 org.springframework.boot.loader.JarLauncher 似乎可以很好地启动 windows 服务,但是我无法正常停止该服务,我必须在任务管理器中将其终止。
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Java]
"Jvm"="E:\Java\jre1.8.0_121_32\bin\client\jvm.dll"
"Classpath"="E:\Apache\prunsvc\myspringbootjar.jar"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Start]
"Class"="org.springframework.boot.loader.JarLauncher"
"Mode"="jvm"
"Method"="main"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Start]
"Class"="com.mycompany.Bootstrap"
"Mode"="jvm"
"Method"="start"
我知道你 post 已经很久了,但我 运行 今天遇到了同样的问题。这可能与 Spring Boot since 1.4.0.
中更改的 JAR 文件打包有关
此处的说明适用于我的情况:
https://github.com/spring-projects/spring-boot/issues/6792#issuecomment-243564648
我能够解决这个问题,所以我 post 找到了解决方案。
问题是 Spring Boot 不再在正常的 class 路径上存储应用程序 classes。 Spring 引导程序有自己的 class 加载器,可以加载应用程序 classes。为了将我的 com.mycompany.Bootstrap class 放在正确的位置,我将下面显示的 ANT 脚本添加到 Maven 构建中。此脚本来自某处 post,但我不记得是哪里了。
听起来 Radu 的解决方案也很合适。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<zip destfile="${project.build.directory}/${project.build.finalName}.jar"
update="true" compress="store">
<fileset dir="${project.build.directory}/classes" >
<include name="com/mycompany/Bootstrap.class"/>
</fileset>
</zip>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
我试图按照 here 的说明 运行 我的 Spring 将 Web 服务作为 windows 服务启动。如果我开始指向 org.springframework.boot.loader.JarLauncher,那么我的 Web 服务将启动并运行,但是当我尝试指向我添加的 Bootstrap class 时,我会收到一条 "FindClass com/mycompany/Bootstrap failed" 消息。所以 prunsrv 可以找到 SpringBoot classes 但找不到我的 classes.
有什么建议吗?使用 org.springframework.boot.loader.JarLauncher 似乎可以很好地启动 windows 服务,但是我无法正常停止该服务,我必须在任务管理器中将其终止。
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Java]
"Jvm"="E:\Java\jre1.8.0_121_32\bin\client\jvm.dll"
"Classpath"="E:\Apache\prunsvc\myspringbootjar.jar"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Start]
"Class"="org.springframework.boot.loader.JarLauncher"
"Mode"="jvm"
"Method"="main"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Start]
"Class"="com.mycompany.Bootstrap"
"Mode"="jvm"
"Method"="start"
我知道你 post 已经很久了,但我 运行 今天遇到了同样的问题。这可能与 Spring Boot since 1.4.0.
中更改的 JAR 文件打包有关此处的说明适用于我的情况: https://github.com/spring-projects/spring-boot/issues/6792#issuecomment-243564648
我能够解决这个问题,所以我 post 找到了解决方案。
问题是 Spring Boot 不再在正常的 class 路径上存储应用程序 classes。 Spring 引导程序有自己的 class 加载器,可以加载应用程序 classes。为了将我的 com.mycompany.Bootstrap class 放在正确的位置,我将下面显示的 ANT 脚本添加到 Maven 构建中。此脚本来自某处 post,但我不记得是哪里了。
听起来 Radu 的解决方案也很合适。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<zip destfile="${project.build.directory}/${project.build.finalName}.jar"
update="true" compress="store">
<fileset dir="${project.build.directory}/classes" >
<include name="com/mycompany/Bootstrap.class"/>
</fileset>
</zip>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>