I am having trouble executing the built jar file:
Running the following command java -jar /build/libs/***.jar
gives me a bunch of NoClassDefFoundError
errors.
But when I run gradle bootrun
it works fine...
I have followed instructions here: http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html
My build.gradle looks like this:
apply plugin: 'spring-boot'
sourceCompatibility = 1.5
version = '1.0'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.6.RELEASE")
}
}
springBoot {
mainClass = "org.gradle.App"
}
dependencies {
compile files('lib/selenium-server-standalone-2.47.1.jar')
}
Thank you.
It might be a bit difficult to answer without some element missing; if you have some fancy stuff, please highlight or better share your application but basically I was able to make it work with the following :
the build.gradle file was pretty much like yours
apply plugin: 'spring-boot'
sourceCompatibility = 1.5
version = '1.0'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.6.RELEASE")
}
}
springBoot {
mainClass = "com.readinglist.ReadingListApplication"
}
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile files('lib/selenium-server-standalone-2.47.1.jar')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
I do not know if they differ a lot but the doc for your 1.2.6 version is http://docs.spring.io/spring-boot/docs/1.2.6.RELEASE/reference/html/build-tool-plugins-gradle-plugin.html#build-tool-plugins-gradle-dependencies-without-versions and they do mention to add the dependencies.
A note on your script, isn't selenium only necessary for your testing ? you could change compile files ..selenium
to testCompile files ..selenium
(or even testRuntime
) your jar file will thank you for that.
For info I build a pretty basic Spring-Boot app for this testing (based on the example from the Spring Boot In Action)
package com.readinglist;
import org.apache.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.openqa.selenium.server.SeleniumServer;
@SpringBootApplication
public class ReadingListApplication {
private static Logger log = Logger.getLogger(ReadingListApplication.class);
public static void main(String[] args) {
SpringApplication.run(ReadingListApplication.class, args);
log.info("SeleniumServer ClassName is " + SeleniumServer.class.getName());
}
}
The important piece is to make sure you have a valid main
method
For reference, my gradle execution is
fhenri@machine:~/project/examples/spring-boot/inactionbook/readinglist$ gradle build
:compileJava
warning: [options] bootstrap class path not set in conjunction with -source 1.5
warning: [options] source value 1.5 is obsolete and will be removed in a future release
warning: [options] target value 1.5 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
4 warnings
:processResources
:classes
:jar
:findMainClass
:startScripts
:distTar
:distZip
:bootRepackage
:assemble
:compileTestJava
warning: [options] bootstrap class path not set in conjunction with -source 1.5
warning: [options] source value 1.5 is obsolete and will be removed in a future release
warning: [options] target value 1.5 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
4 warnings
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 5.411 secs
and finally running your command
fhenri@machine:~/project/examples/spring-boot/inactionbook/readinglist$ java -jar build/libs/***.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.2.6.RELEASE)
2015-10-13 19:18:01.625 INFO 94280 --- [ main] com.readinglist.ReadingListApplication : Starting ReadingListApplication on macbook-pro-de-frederic.home with PID 94280 (/Users/fhenri/project/examples/spring-boot/inactionbook/readinglist/build/libs/readinglist-1.0.jar started by fhenri in /Users/fhenri/project/examples/spring-boot/inactionbook/readinglist)
2015-10-13 19:18:01.679 INFO 94280 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@71c79795: startup date [Tue Oct 13 19:18:01 CEST 2015]; root of context hierarchy
2015-10-13 19:18:02.377 INFO 94280 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2015-10-13 19:18:03.141 INFO 94280 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2015-10-13 19:18:03.489 INFO 94280 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat
2015-10-13 19:18:03.491 INFO 94280 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.26
2015-10-13 19:18:04.727 INFO 94280 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2015-10-13 19:18:04.727 INFO 94280 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3053 ms
2015-10-13 19:18:05.379 INFO 94280 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2015-10-13 19:18:05.385 INFO 94280 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-10-13 19:18:05.386 INFO 94280 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2015-10-13 19:18:05.692 INFO 94280 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@71c79795: startup date [Tue Oct 13 19:18:01 CEST 2015]; root of context hierarchy
2015-10-13 19:18:05.757 INFO 94280 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2015-10-13 19:18:05.758 INFO 94280 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
2015-10-13 19:18:05.786 INFO 94280 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-10-13 19:18:05.787 INFO 94280 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-10-13 19:18:05.824 INFO 94280 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2015-10-13 19:18:05.940 INFO 94280 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2015-10-13 19:18:06.047 INFO 94280 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2015-10-13 19:18:06.050 INFO 94280 --- [ main] com.readinglist.ReadingListApplication : Started ReadingListApplication in 4.751 seconds (JVM running for 5.476)
2015-10-13 19:18:06.052 INFO 94280 --- [ main] com.readinglist.ReadingListApplication : SeleniumServer ClassName is org.openqa.selenium.server.SeleniumServer
If you have something wrong, make sure to run gradle clean
after you made some changes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With