您好,我有一个多项目设置,我们已经继承并尝试dockerize。我能够使用spring boot cmd成功运行应用程序:
SPRING_PROFILES_ACTIVE=local ./gradlew :products:myapp:bootRun
但是,当我执行以下操作时:
java -jar -Dspring.profiles.active=local myapp.jar
我正面临错误:
`Caused by: java.lang.ClassNotFoundException: javax.validation.bootstrap.ProviderSpecificBootstrap
at java.net.URLClassLoader$1.run(URLClassLoader.java:370) ~[na:1.8.0_91]
at java.net.URLClassLoader$1.run(URLClassLoader.java:362) ~[na:1.8.0_91]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_91]
at java.net.URLClassLoader.findClass(URLClassLoader.java:361) ~[na:1.8.0_91]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_91]
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:94) ~[myapp.jar:na]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_91]
... 43 common frames omitted
Caused by: java.util.zip.ZipException: invalid code lengths set
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164) ~[na:1.8.0_91]
at org.springframework.boot.loader.jar.ZipInflaterInputStream.read(ZipInflaterInputStream.java:52) ~[myapp.jar:na]
at sun.misc.Resource.getBytes(Resource.java:124) ~[na:1.8.0_91]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:462) ~[na:1.8.0_91]
at java.net.URLClassLoader.access$100(URLClassLoader.java:73) ~[na:1.8.0_91]
at java.net.URLClassLoader$1.run(URLClassLoader.java:368) ~[na:1.8.0_91]
... 49 common frames omitted
`我的Application.java有
@Import({
EmbeddedServletContainerAutoConfiguration.class,
ManagementServerPropertiesAutoConfiguration.class,
HealthEndpointConfigImpl.class,
EndpointAutoConfiguration.class,
EndpointWebMvcAutoConfiguration.class
})
public class Application
{}
此产品的gradle文件:
apply plugin: 'java'
dependencies {
compile group: 'org.springframework', name: 'spring-context', version: rev_spring
compile group: 'org.springframework', name: 'spring-webmvc', version: rev_spring
compile group: 'org.springframework.boot', name: 'spring-boot-actuator', version: rev_spring_boot
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: rev_spring_boot
testCompile group: 'junit', name: 'junit', version: rev_junit
testCompile group: 'org.mockito', name: 'mockito-all', version: rev_mockito
testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: rev_hamcrest
testCompile group: 'org.springframework', name: 'spring-test', version: rev_spring
}
apply plugin: 'org.springframework.boot'
以外的gradle文件:
configure(subprojects.findAll { it.buildFile.exists() }) {
buildscript {
dependencies {
classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: rev_spring_boot
}
}
plugins.withId('java') {
processResources {
inputs.properties(['version': version])
doLast {
ant.propertyfile(file: new File("${sourceSets.main.output.resourcesDir}/config/application.properties")) {
entry key: 'spring.application.version', value: version
}
}
}
}
plugins.withId('org.springframework.boot') {
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute module('org.springframework.boot:spring-boot-starter-tomcat') with module("org.springframework.boot:spring-boot-starter-jetty:${rev_spring_boot}")
}
}
springBoot {
backupSource = false
layout = 'JAR'
}
bootRepackage {
withJarTask = jar
}
我在这一点上陷入困境。试图研究错误,但没有多大帮助。 我猜导入EmbeddedServletContainerAutoConfiguration.class是罪魁祸首,但想知道为什么当我们将它作为弹簧启动运行时,它没问题。