Use cds init with the java template to scaffold a Spring Boot CAP project, understand the Maven module layout, and add a sample service.
CAP Java projects are Maven multi-module Spring Boot applications generated by the CDS CLI.
cds init bookshop-java --add java
cd bookshop-java
Or use Maven archetypes directly:
mvn archetype:generate -DarchetypeArtifactId=cds-services-archetype \
-DarchetypeGroupId=com.sap.cds \
-DarchetypeVersion=RELEASE \
-DgroupId=com.mycompany \
-DartifactId=bookshop-java
bookshop-java/
├── db/
│ └── schema.cds ← same CDS data model as Node.js
├── srv/
│ ├── cat-service.cds ← same service definition
│ └── src/main/java/
│ └── com/mycompany/
│ └── CatalogServiceHandler.java ← Java event handler
├── app/ ← optional Fiori UI
├── pom.xml ← root Maven POM
└── srv/pom.xml ← service module POM
<parent>
<groupId>com.sap.cds</groupId>
<artifactId>cds-starter-spring-boot</artifactId>
<version>RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>com.sap.cds</groupId>
<artifactId>cds-starter-spring-boot</artifactId>
</dependency>
<!-- SQLite for local dev -->
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
srv/src/main/java/com/mycompany/CatalogServiceHandler.java:
@Component
@ServiceName(CatalogService_.CDS_NAME)
public class CatalogServiceHandler implements EventHandler {
@Before(event = CqnService.EVENT_READ, entity = Books_.CDS_NAME)
public void beforeReadBooks(CdsReadEventContext context) {
System.out.println("Reading books for user: " + context.getUserInfo().getName());
}
}
Create db/data/bookshop-Books.csv — same CSV format as Node.js:
ID,title,author,stock,price
1,The Hobbit,J.R.R. Tolkien,100,14.99
2,Dune,Frank Herbert,75,12.50
mvn spring-boot:run
Sign in for progress tracking & Q&A →