sync compiled classes from eclipse gradle plugin with spring boot devtools
Spring Boot DevTools provides a set of tools that can help improve the development experience. One of the features is automatic class reloading, which can be particularly useful during development. Eclipse, on the other hand, has its own set of tools for Java development. To sync compiled classes from the Eclipse Gradle plugin with Spring Boot DevTools, you can follow these general steps:
Ensure Spring Boot DevTools is Configured
- Make sure that the
spring-boot-devtools
dependency is included in your Spring Boot project. Add the following dependency to yourbuild.gradle
file:
dependencies {
implementation 'org.springframework.boot:spring-boot-devtools'
}
Configure gradle
Configure eclipse
gradle plugin
eclipse {
classpath {
defaultOutputDir = file('build/eclipse')
baseSourceOutputDir = file('build/classes/java')
file.whenMerged {
entries.each { entry ->
if (entry.kind == 'src' && entry.hasProperty('output')) {
if (entry.output != null) entry.output = entry.output.replace('bin/', "build/")
}
}
}
}
}
Configure JavaCompile
tasks
According Upgrading to Spring Framework 6.x we need apply -parameters
jvm arguments into compiler to make it works.
Issues about this config
Groovy DSL
tasks.withType(JavaCompile).configureEach {
options.compilerArgs.add("-parameters")
}
Kotlin DSL
tasks.withType<JavaCompile>() {
options.compilerArgs.add("-parameters")
}
Configure jar
and bootJar
tasks
In Gradle, if you want to create a JAR file and exclude duplicate files, you can use the DuplicatesStrategy.EXCLUDE strategy. This strategy excludes duplicates from the final JAR by keeping only the first occurrence of each duplicate file.
// Optional: Specify the main class if your JAR is executable
application {
mainClassName = 'web.MainApplication'
}
// Configure the JAR task
jar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes "Start-Class": "web.MainApplication"
}
}
// Configure the spring JAR task
bootJar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes "Start-Class": "web.MainApplication"
}
}
Replace 'web.MainApplication' with the actual main class of your application.
Note: The
application
block is optional and is only necessary if your JAR is executable, and you want to specify the main class. If your JAR is not executable, you can omit theapplication
block.
Initialize configuration for Eclipse
When working with Gradle in Eclipse, you can use the eclipse
plugin to generate Eclipse-specific configuration files. These files help to set up your Eclipse project based on the dependencies and structure defined in your Gradle build script. To initialize the Eclipse configuration for your Gradle project, follow these step:
gradlew eclipse --no-daemon
--no-daemon
parameter will kill the java when app exit (CTRL+C or Close terminal)
Configure Eclipse for Automatic Building
In Eclipse, go to
Project
>Build Automatically
to ensure that automatic building is enabled.- Configure Gradle Build in Eclipse:Ensure that your Eclipse project is properly configured to use the Gradle build system. You can do this by right-clicking on your project in the Eclipse Project Explorer, selecting
Properties
, and then navigating toProject Facets
. Make sure that theGradle
facet is selected.- Enable Automatic Project Refresh in Eclipse:Go to
Window
>Preferences
>General
>Workspace
.Enable the option "Refresh using native hooks or polling".
Enable the option "Refresh on access".- Configure Spring Boot DevTools in
application.properties
:In your
src/main/resources/application.properties
(orapplication.yml
) file, ensure that DevTools is configured to enable class reloading:
spring.devtools.restart.enabled=true
Run the Application with DevTools
- Run your Spring Boot application from Eclipse with the Gradle plugin.
- Spring Boot DevTools should detect changes in your class files and automatically trigger a restart.
gradlew bootrun --no-daemon
--no-daemon
parameter will kill the java when app exit (CTRL+C or Close terminal)
Conclusion
Now spring boot livereload working even you changes the java
, kotlin
, groovy
or resources
files.
Keep in mind that the effectiveness of DevTools may depend on various factors, and not all changes can be hot-reloaded. Certain types of changes, such as those to method signatures or certain structural changes, may still require a manual restart.
By following these steps, you should be able to synchronize the compiled classes from the Eclipse Gradle plugin with Spring Boot DevTools during development. If you encounter any issues, consider checking the Spring Boot DevTools documentation and the Eclipse documentation for further troubleshooting.