Generate a CAP Java Project

Use cds init with the java template to scaffold a Spring Boot CAP project, understand the Maven module layout, and add a sample service.

Generate a CAP Java Project

CAP Java projects are Maven multi-module Spring Boot applications generated by the CDS CLI.

Generate the project

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

Project structure

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

Root pom.xml highlights

<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>

Add a sample service handler (Java)

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());
    }
}

Add data

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

Build and run (next topic)

mvn spring-boot:run
Sign in for progress tracking & Q&A →