New Maven Archetype to create Vaadin/jOOQ Applications

I’ve created a Vaadin/jOOQ Maven Archetype:

Check it out. Feedback is always welcome!

4 Likes

Awesome! Is the target folder on the project root pushed by mistake or is it required?

Hi Marco,

That was a mistake. Thanks for letting me know.

There’s a new version 0.0.2 of my Vaadin/jOOQ Maven Archetype :rocket:

Since the latest Docker Engine (version 29) requires Testcontainers 2.0.x, the Testcontainers jOOQ plugin is no longer used, as it’s not flexible enough to support newer Testcontainers versions and doesn’t allow jOOQ Pro.

Grab it while it’s hot! https://github.com/martinellich/vaadin-jooq-archetype

I tried it. It gave some warnings during creation:

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: vaadin-jooq-archetype:0.0.2
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.vaadin
[INFO] Parameter: artifactId, Value: jooq-test
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: org.vaadin
[INFO] Parameter: packageInPathFormat, Value: org/vaadin
[INFO] Parameter: package, Value: org.vaadin
[INFO] Parameter: groupId, Value: org.vaadin
[INFO] Parameter: artifactId, Value: jooq-test
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[WARNING] CP Don't override file /mnt/c/dev/test-projects/jooq-test/.mvn
[WARNING] CP Don't override file /mnt/c/dev/test-projects/jooq-test/src/main/frontend
[WARNING] Don't override file /mnt/c/dev/test-projects/jooq-test/src/main/java/org/vaadin
[WARNING] Don't override file /mnt/c/dev/test-projects/jooq-test/src/main/resources
[WARNING] Don't override file /mnt/c/dev/test-projects/jooq-test/src/test/java/org/vaadin
[WARNING] Don't override file /mnt/c/dev/test-projects/jooq-test/src/test/resources
[INFO] Project created from Archetype in dir: /mnt/c/dev/test-projects/jooq-test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  24:52 min
[INFO] Finished at: 2025-11-25T09:47:18+02:00
[INFO] ------------------------------------------------------------------------

There’s also an empty directory named null at the root, which seems like a bug:

olli@3admin:~/projects/test-projects/jooq-test$ ls -al
total 24
drwxrwxrwx 1 olli olli  4096 Nov 25 09:47 .
drwxrwxrwx 1 olli olli  4096 Nov 25 09:47 ..
drwxrwxrwx 1 olli olli  4096 Nov 25 09:47 .mvn
drwxrwxrwx 1 olli olli  4096 Nov 25 09:47 null
-rwxrwxrwx 1 olli olli 21435 Nov 25 09:47 pom.xml
drwxrwxrwx 1 olli olli  4096 Nov 25 09:47 src

Hi @ollit.1

Thanks for letting me know.
I never saw the null directory in my tests. But I fixed the warnings.

There is a new version 0.0.3. Please try this.

Warnings are gone with 0.0.3, but the null directory persists.

Using Maven 3.6.3 in WSL2 on Windows 11 if that makes a difference.

The project contains the mvnw Maven Wrapper.
Can you try with this one?
The wrapper comes with Maven 3.9.1, your Maven 3.6.3 is very old

There’s no wrapper; maybe that’s the null directory? The .mvn directory contains just the following:

olli@3admin:~/projects/test-projects/jooq-test/.mvn$ tree
.
β”œβ”€β”€ jvm.config
└── wrapper
    └── maven-wrapper.properties

That’s all it needs

If you run ./mvnw compile the wrapper will be downloaded

olli@3admin:~/projects/test-projects/jooq-test$ ./mvnw compile
-bash: ./mvnw: No such file or directory

probably the mvnw has not the right permission.

please execute first

chmod 755 mvnw

olli@3admin:~/projects/test-projects/jooq-test$ chmod 755 mvnw
chmod: cannot access 'mvnw': No such file or directory

Can you execute tree in your project directory?

My project structure looks like this:

.
β”œβ”€β”€ README.md
β”œβ”€β”€ mvnw
β”œβ”€β”€ mvnw.cmd
β”œβ”€β”€ pom.xml
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ main
β”‚   β”‚   β”œβ”€β”€ frontend
β”‚   β”‚   β”‚   └── themes
β”‚   β”‚   β”‚       └── app
β”‚   β”‚   β”‚           β”œβ”€β”€ main-layout.css
β”‚   β”‚   β”‚           β”œβ”€β”€ styles.css
β”‚   β”‚   β”‚           └── theme.json
β”‚   β”‚   β”œβ”€β”€ java
β”‚   β”‚   β”‚   └── com
β”‚   β”‚   β”‚       └── demo
β”‚   β”‚   β”‚           β”œβ”€β”€ Application.java
β”‚   β”‚   β”‚           β”œβ”€β”€ core
β”‚   β”‚   β”‚           β”‚   β”œβ”€β”€ configuration
β”‚   β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ VjJooqConfiguration.java
β”‚   β”‚   β”‚           β”‚   β”‚   └── package-info.java
β”‚   β”‚   β”‚           β”‚   β”œβ”€β”€ domain
β”‚   β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ Role.java
β”‚   β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ UserDAO.java
β”‚   β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ UserDetailsServiceImpl.java
β”‚   β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ UserWithRoles.java
β”‚   β”‚   β”‚           β”‚   β”‚   └── package-info.java
β”‚   β”‚   β”‚           β”‚   β”œβ”€β”€ security
β”‚   β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ SecurityConfiguration.java
β”‚   β”‚   β”‚           β”‚   β”‚   └── SecurityContext.java
β”‚   β”‚   β”‚           β”‚   └── ui
β”‚   β”‚   β”‚           β”‚       β”œβ”€β”€ LoginView.java
β”‚   β”‚   β”‚           β”‚       β”œβ”€β”€ UserView.java
β”‚   β”‚   β”‚           β”‚       β”œβ”€β”€ components
β”‚   β”‚   β”‚           β”‚       β”‚   β”œβ”€β”€ Notifier.java
β”‚   β”‚   β”‚           β”‚       β”‚   └── package-info.java
β”‚   β”‚   β”‚           β”‚       β”œβ”€β”€ i18n
β”‚   β”‚   β”‚           β”‚       β”‚   β”œβ”€β”€ TranslationProvider.java
β”‚   β”‚   β”‚           β”‚       β”‚   └── package-info.java
β”‚   β”‚   β”‚           β”‚       └── layout
β”‚   β”‚   β”‚           β”‚           β”œβ”€β”€ MainLayout.java
β”‚   β”‚   β”‚           β”‚           └── package-info.java
β”‚   β”‚   β”‚           β”œβ”€β”€ greeting
β”‚   β”‚   β”‚           β”‚   └── ui
β”‚   β”‚   β”‚           β”‚       └── HelloWorldView.java
β”‚   β”‚   β”‚           └── person
β”‚   β”‚   β”‚               β”œβ”€β”€ domain
β”‚   β”‚   β”‚               β”‚   β”œβ”€β”€ PersonDAO.java
β”‚   β”‚   β”‚               β”‚   └── package-info.java
β”‚   β”‚   β”‚               └── ui
β”‚   β”‚   β”‚                   β”œβ”€β”€ PersonView.java
β”‚   β”‚   β”‚                   └── package-info.java
β”‚   β”‚   └── resources
β”‚   β”‚       β”œβ”€β”€ META-INF
β”‚   β”‚       β”‚   └── resources
β”‚   β”‚       β”‚       └── icons
β”‚   β”‚       β”‚           └── icon.png
β”‚   β”‚       β”œβ”€β”€ application.properties
β”‚   β”‚       β”œβ”€β”€ banner.txt
β”‚   β”‚       β”œβ”€β”€ db
β”‚   β”‚       β”‚   └── migration
β”‚   β”‚       β”‚       β”œβ”€β”€ V001__create_user.sql
β”‚   β”‚       β”‚       └── V002__create_person.sql
β”‚   β”‚       └── vaadin-i18n
β”‚   β”‚           β”œβ”€β”€ translations.properties
β”‚   β”‚           └── translations_de.properties
β”‚   └── test
β”‚       β”œβ”€β”€ java
β”‚       β”‚   └── com
β”‚       β”‚       └── demo
β”‚       β”‚           β”œβ”€β”€ ArchitectureTest.java
β”‚       β”‚           β”œβ”€β”€ TestApplication.java
β”‚       β”‚           β”œβ”€β”€ TestcontainersConfiguration.java
β”‚       β”‚           β”œβ”€β”€ core
β”‚       β”‚           β”‚   └── ui
β”‚       β”‚           β”‚       β”œβ”€β”€ KaribuTest.java
β”‚       β”‚           β”‚       β”œβ”€β”€ LoginViewTest.java
β”‚       β”‚           β”‚       β”œβ”€β”€ PlaywrightIT.java
β”‚       β”‚           β”‚       └── package-info.java
β”‚       β”‚           β”œβ”€β”€ greeting
β”‚       β”‚           β”‚   └── ui
β”‚       β”‚           β”‚       β”œβ”€β”€ HelloWorldViewIT.java
β”‚       β”‚           β”‚       └── HelloWorldViewTest.java
β”‚       β”‚           β”œβ”€β”€ package-info.java
β”‚       β”‚           β”œβ”€β”€ person
β”‚       β”‚           β”‚   └── ui
β”‚       β”‚           β”‚       └── PersonViewTest.java
β”‚       β”‚           └── user
β”‚       β”‚               └── ui
β”‚       β”‚                   └── UserViewTest.java
β”‚       └── resources
β”‚           β”œβ”€β”€ db
β”‚           β”‚   └── migration
β”‚           β”‚       └── afterMigrate.sql
β”‚           └── junit-platform.properties
└── tree.txt

44 directories, 52 files

olli@3admin:~/projects/test-projects/jooq-test$ tree
.
β”œβ”€β”€ null
β”œβ”€β”€ pom.xml
└── src
    β”œβ”€β”€ main
    β”‚   β”œβ”€β”€ frontend
    β”‚   β”‚   └── themes
    β”‚   β”‚       └── app
    β”‚   β”‚           β”œβ”€β”€ main-layout.css
    β”‚   β”‚           β”œβ”€β”€ styles.css
    β”‚   β”‚           └── theme.json
    β”‚   β”œβ”€β”€ java
    β”‚   β”‚   └── org
    β”‚   β”‚       └── vaadin
    β”‚   β”‚           β”œβ”€β”€ Application.java
    β”‚   β”‚           β”œβ”€β”€ core
    β”‚   β”‚           β”‚   β”œβ”€β”€ configuration
    β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ VjJooqConfiguration.java
    β”‚   β”‚           β”‚   β”‚   └── package-info.java
    β”‚   β”‚           β”‚   β”œβ”€β”€ domain
    β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ Role.java
    β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ UserDAO.java
    β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ UserDetailsServiceImpl.java
    β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ UserWithRoles.java
    β”‚   β”‚           β”‚   β”‚   └── package-info.java
    β”‚   β”‚           β”‚   β”œβ”€β”€ security
    β”‚   β”‚           β”‚   β”‚   β”œβ”€β”€ SecurityConfiguration.java
    β”‚   β”‚           β”‚   β”‚   └── SecurityContext.java
    β”‚   β”‚           β”‚   └── ui
    β”‚   β”‚           β”‚       β”œβ”€β”€ LoginView.java
    β”‚   β”‚           β”‚       β”œβ”€β”€ UserView.java
    β”‚   β”‚           β”‚       β”œβ”€β”€ components
    β”‚   β”‚           β”‚       β”‚   β”œβ”€β”€ Notifier.java
    β”‚   β”‚           β”‚       β”‚   └── package-info.java
    β”‚   β”‚           β”‚       β”œβ”€β”€ i18n
    β”‚   β”‚           β”‚       β”‚   β”œβ”€β”€ TranslationProvider.java
    β”‚   β”‚           β”‚       β”‚   └── package-info.java
    β”‚   β”‚           β”‚       └── layout
    β”‚   β”‚           β”‚           β”œβ”€β”€ MainLayout.java
    β”‚   β”‚           β”‚           └── package-info.java
    β”‚   β”‚           β”œβ”€β”€ greeting
    β”‚   β”‚           β”‚   └── ui
    β”‚   β”‚           β”‚       └── HelloWorldView.java
    β”‚   β”‚           └── person
    β”‚   β”‚               β”œβ”€β”€ domain
    β”‚   β”‚               β”‚   β”œβ”€β”€ PersonDAO.java
    β”‚   β”‚               β”‚   └── package-info.java
    β”‚   β”‚               └── ui
    β”‚   β”‚                   β”œβ”€β”€ PersonView.java
    β”‚   β”‚                   └── package-info.java
    β”‚   └── resources
    β”‚       β”œβ”€β”€ META-INF
    β”‚       β”‚   └── resources
    β”‚       β”‚       └── icons
    β”‚       β”‚           └── icon.png
    β”‚       β”œβ”€β”€ application.properties
    β”‚       β”œβ”€β”€ banner.txt
    β”‚       β”œβ”€β”€ db
    β”‚       β”‚   └── migration
    β”‚       β”‚       β”œβ”€β”€ V001__create_user.sql
    β”‚       β”‚       └── V002__create_person.sql
    β”‚       └── vaadin-i18n
    β”‚           β”œβ”€β”€ translations.properties
    β”‚           └── translations_de.properties
    └── test
        β”œβ”€β”€ java
        β”‚   └── org
        β”‚       └── vaadin
        β”‚           β”œβ”€β”€ ArchitectureTest.java
        β”‚           β”œβ”€β”€ TestApplication.java
        β”‚           β”œβ”€β”€ TestcontainersConfiguration.java
        β”‚           β”œβ”€β”€ core
        β”‚           β”‚   └── ui
        β”‚           β”‚       β”œβ”€β”€ KaribuTest.java
        β”‚           β”‚       β”œβ”€β”€ LoginViewTest.java
        β”‚           β”‚       β”œβ”€β”€ PlaywrightIT.java
        β”‚           β”‚       └── package-info.java
        β”‚           β”œβ”€β”€ greeting
        β”‚           β”‚   └── ui
        β”‚           β”‚       β”œβ”€β”€ HelloWorldViewIT.java
        β”‚           β”‚       └── HelloWorldViewTest.java
        β”‚           β”œβ”€β”€ package-info.java
        β”‚           β”œβ”€β”€ person
        β”‚           β”‚   └── ui
        β”‚           β”‚       └── PersonViewTest.java
        β”‚           └── user
        β”‚               └── ui
        β”‚                   └── UserViewTest.java
        └── resources
            β”œβ”€β”€ db
            β”‚   └── migration
            β”‚       └── afterMigrate.sql
            └── junit-platform.properties

44 directories, 48 files