JEP 458: Launch Multi-File Source-Code Programs When will Spring boot support code files such as Controller/Service to run directly without compiling?
Comment From: wilkinsona
What do you believe would need to be done to support JEP 458?
If you're happy with the limitations of JEP 458, such as the need to assemble the classpath manually, I believe it should just work. For example, here's a minimal app starting with Java 23:
java -classpath '*' com/example/jep_458/Jep458Application.java
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.4.3)
[2025-02-27 14:55:15.798] - 48242 INFO [main] --- com.example.jep_458.Jep458Application: Starting Jep458Application using Java 17.0.13 with PID 48242 (/Users/aw036093/Downloads/jep-458/src/main/java/com/example/jep_458/Jep458Application.java started by aw036093 in /Users/aw036093/Downloads/jep-458/src/main/java)
[2025-02-27 14:55:15.815] - 48242 INFO [main] --- com.example.jep_458.Jep458Application: No active profile set, falling back to 1 default profile: "default"
[2025-02-27 14:55:16.012] - 48242 INFO [main] --- com.example.jep_458.Jep458Application: Started Jep458Application in 0.324 seconds (process running for 0.629)
This relies upon the following files:
.
βββ com
βΒ Β βββ example
βΒ Β βββ jep_458
βΒ Β βββ Jep458Application.java
βββ spring-aop-6.2.3.jar
βββ spring-beans-6.2.3.jar
βββ spring-boot-3.4.3.jar
βββ spring-boot-autoconfigure-3.4.3.jar
βββ spring-context-6.2.3.jar
βββ spring-core-6.2.3.jar
βββ spring-expression-6.2.3.jar
βββ spring-jcl-6.2.3.jar
Comment From: slieer
Thank you so much for your quick reply!
JEP 458 allows us to develop quickly without manual compilation or packaging. There is still value in small projects or projects with small concurrency, and there are many scenarios for this scenario. There is also value in low-code combined with some high-code scenarios.
Comment From: slieer
That's great! I also passed the initial verification.
slieer@slieer-pc:/opt/workspace/gs-accessing-data-rest/complete/src/main/java$ pwd /opt/workspace/gs-accessing-data-rest/complete/src/main/java slieer@slieer-pc:/opt/workspace/gs-accessing-data-rest/complete/src/main/java$ dir accessors-smart-2.5.2.jar jackson-datatype-jsr310-2.18.2.jar log4j-to-slf4j-2.24.3.jar spring-boot-starter-web-3.4.3.jar android-json-0.0.20131108.vaadin1.jar jackson-module-parameter-names-2.18.2.jar logback-classic-1.5.16.jar spring-boot-test-3.4.3.jar angus-activation-2.0.2.jar jakarta.activation-api-2.1.3.jar logback-core-1.5.16.jar spring-boot-test-autoconfigure-3.4.3.jar antlr4-runtime-4.13.0.jar jakarta.annotation-api-2.1.1.jar micrometer-commons-1.14.4.jar spring-context-6.2.3.jar apiguardian-api-1.1.2.jar jakarta.inject-api-2.0.1.jar micrometer-observation-1.14.4.jar spring-core-6.2.3.jar asm-9.7.1.jar jakarta.persistence-api-3.1.0.jar mockito-core-5.14.2.jar spring-data-commons-3.4.3.jar aspectjweaver-1.9.22.1.jar jakarta.transaction-api-2.0.1.jar mockito-junit-jupiter-5.14.2.jar spring-data-jpa-3.4.3.jar assertj-core-3.26.3.jar jakarta.xml.bind-api-4.0.2.jar objenesis-3.3.jar spring-data-rest-core-4.4.3.jar awaitility-4.2.2.jar jandex-3.2.0.jar opentest4j-1.3.0.jar spring-data-rest-webmvc-4.4.3.jar byte-buddy-1.15.11.jar jaxb-core-4.0.5.jar slf4j-api-2.0.16.jar spring-expression-6.2.3.jar byte-buddy-agent-1.15.11.jar jaxb-runtime-4.0.5.jar snakeyaml-2.3.jar spring-hateoas-2.4.1.jar classmate-1.7.0.jar jboss-logging-3.6.1.Final.jar spring-aop-6.2.3.jar spring-jcl-6.2.3.jar com jsonassert-1.5.3.jar spring-aspects-6.2.3.jar spring-jdbc-6.2.3.jar evo-inflector-1.3.jar json-path-2.9.0.jar spring-beans-6.2.3.jar spring-orm-6.2.3.jar h2-2.3.232.jar json-smart-2.5.2.jar spring-boot-3.4.3.jar spring-plugin-core-3.0.0.jar hamcrest-2.2.jar jul-to-slf4j-2.0.16.jar spring-boot-autoconfigure-3.4.3.jar spring-test-6.2.3.jar hibernate-commons-annotations-7.0.3.Final.jar junit-jupiter-5.11.4.jar spring-boot-starter-3.4.3.jar spring-tx-6.2.3.jar hibernate-core-6.6.8.Final.jar junit-jupiter-api-5.11.4.jar spring-boot-starter-data-jpa-3.4.3.jar spring-web-6.2.3.jar HikariCP-5.1.0.jar junit-jupiter-engine-5.11.4.jar spring-boot-starter-data-rest-3.4.3.jar spring-webmvc-6.2.3.jar istack-commons-runtime-4.1.2.jar junit-jupiter-params-5.11.4.jar spring-boot-starter-jdbc-3.4.3.jar tomcat-embed-core-10.1.36.jar jackson-annotations-2.18.2.jar junit-platform-commons-1.11.4.jar spring-boot-starter-json-3.4.3.jar tomcat-embed-el-10.1.36.jar jackson-core-2.18.2.jar junit-platform-engine-1.11.4.jar spring-boot-starter-logging-3.4.3.jar tomcat-embed-websocket-10.1.36.jar jackson-databind-2.18.2.jar libs spring-boot-starter-test-3.4.3.jar txw2-4.0.5.jar jackson-datatype-jdk8-2.18.2.jar log4j-api-2.24.3.jar spring-boot-starter-tomcat-3.4.3.jar xmlunit-core-2.10.0.jar slieer@slieer-pc:/opt/workspace/gs-accessing-data-rest/complete/src/main/java$ /home/slieer/.jdks/corretto-23.0.2/bin/java -classpath '*' com/example/accessingdatarest/AccessingDataRestApplication.java
. _ _ __ _ _ /\ / ' __ _ () __ __ _ \ \ \ \ ( ( )_ | ' | '| | ' \/ _` | \ \ \ \ \/ )| |)| | | | | || (| | ) ) ) ) ' |_| .|| ||| |_, | / / / / =========|_|==============|/=////
:: Spring Boot :: (v3.4.3)
2025-03-01T10:11:14.071+08:00 INFO 329256 --- [ main] c.e.a.AccessingDataRestApplication : Starting AccessingDataRestApplication using Java 23.0.2 with PID 329256 (/opt/workspace/gs-accessing-data-rest/complete/src/main/java/com/example/accessingdatarest/AccessingDataRestApplication.java started by slieer in /opt/workspace/gs-accessing-data-rest/complete/src/main/java) 2025-03-01T10:11:14.076+08:00 INFO 329256 --- [ main] c.e.a.AccessingDataRestApplication : No active profile set, falling back to 1 default profile: "default" 2025-03-01T10:11:14.742+08:00 INFO 329256 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2025-03-01T10:11:14.763+08:00 INFO 329256 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 11 ms. Found 0 JPA repository interfaces. 2025-03-01T10:11:15.358+08:00 INFO 329256 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2025-03-01T10:11:15.379+08:00 INFO 329256 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2025-03-01T10:11:15.379+08:00 INFO 329256 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.36] 2025-03-01T10:11:15.421+08:00 INFO 329256 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2025-03-01T10:11:15.422+08:00 INFO 329256 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1277 ms 2025-03-01T10:11:15.590+08:00 INFO 329256 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2025-03-01T10:11:15.779+08:00 INFO 329256 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:b07462d8-51bf-41f2-95c8-b3412035fcc7 user=SA 2025-03-01T10:11:15.781+08:00 INFO 329256 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2025-03-01T10:11:15.845+08:00 INFO 329256 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2025-03-01T10:11:15.891+08:00 INFO 329256 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.8.Final 2025-03-01T10:11:15.920+08:00 INFO 329256 --- [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled 2025-03-01T10:11:16.163+08:00 INFO 329256 --- [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer 2025-03-01T10:11:16.233+08:00 INFO 329256 --- [ main] org.hibernate.orm.connections.pooling : HHH10001005: Database info: Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)'] Database driver: undefined/unknown Database version: 2.3.232 Autocommit mode: undefined/unknown Isolation level: undefined/unknown Minimum pool size: undefined/unknown Maximum pool size: undefined/unknown 2025-03-01T10:11:16.449+08:00 INFO 329256 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) 2025-03-01T10:11:16.453+08:00 INFO 329256 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2025-03-01T10:11:16.497+08:00 WARN 329256 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2025-03-01T10:11:17.305+08:00 INFO 329256 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' 2025-03-01T10:11:17.316+08:00 INFO 329256 --- [ main] c.e.a.AccessingDataRestApplication : Started AccessingDataRestApplication in 3.642 seconds (process running for 4.606)