Skip to content

Commit 18b23bf

Browse files
eelhazatisjmillington
authored andcommitted
[BAEL-3443] How To Write A Quarkus Extension (eugenp#8260)
* quarkus extension * add the extension module to default-first profile. * 1.0.0.CR1 ==> 1.0.0.CR2 * Quarkus version ==> 1.0.0.Final * remove comment. * reorder module builds
1 parent 680d71a commit 18b23bf

File tree

12 files changed

+385
-0
lines changed

12 files changed

+385
-0
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@
635635
<module>java-blockchain</module>
636636
<module>machine-learning</module>
637637
<module>wildfly</module>
638+
<module>quarkus-extension</module>
638639
</modules>
639640

640641
</profile>

quarkus-extension/pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.baeldung.quarkus.extension</groupId>
8+
<artifactId>quarkus-extension</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
<name>Quarkus - Liquibase Extension</name>
11+
<packaging>pom</packaging>
12+
13+
<modules>
14+
<module>quarkus-liquibase</module>
15+
<module>quarkus-app</module>
16+
</modules>
17+
18+
</project>

quarkus-extension/quarkus-app/pom.xml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?xml version="1.0"?>
2+
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
3+
xmlns="http://maven.apache.org/POM/4.0.0"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
5+
<modelVersion>4.0.0</modelVersion>
6+
<groupId>com.baeldung.quarkus.app</groupId>
7+
<artifactId>quarkus-app</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<properties>
10+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
11+
<surefire-plugin.version>2.22.0</surefire-plugin.version>
12+
<maven.compiler.parameters>true</maven.compiler.parameters>
13+
<quarkus.version>1.0.0.Final</quarkus.version>
14+
<compiler-plugin.version>3.8.1</compiler-plugin.version>
15+
<maven.compiler.source>1.8</maven.compiler.source>
16+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17+
<maven.compiler.target>1.8</maven.compiler.target>
18+
</properties>
19+
<dependencyManagement>
20+
<dependencies>
21+
<dependency>
22+
<groupId>io.quarkus</groupId>
23+
<artifactId>quarkus-universe-bom</artifactId>
24+
<version>${quarkus.version}</version>
25+
<type>pom</type>
26+
<scope>import</scope>
27+
</dependency>
28+
</dependencies>
29+
</dependencyManagement>
30+
<dependencies>
31+
<dependency>
32+
<groupId>com.baeldung.quarkus.liquibase</groupId>
33+
<artifactId>quarkus-liquibase</artifactId>
34+
<version>1.0-SNAPSHOT</version>
35+
</dependency>
36+
<dependency>
37+
<groupId>io.quarkus</groupId>
38+
<artifactId>quarkus-jdbc-h2</artifactId>
39+
<version>${quarkus.version}</version>
40+
</dependency>
41+
</dependencies>
42+
<build>
43+
<plugins>
44+
<plugin>
45+
<groupId>io.quarkus</groupId>
46+
<artifactId>quarkus-maven-plugin</artifactId>
47+
<version>${quarkus.version}</version>
48+
<executions>
49+
<execution>
50+
<goals>
51+
<goal>build</goal>
52+
</goals>
53+
</execution>
54+
</executions>
55+
</plugin>
56+
<plugin>
57+
<artifactId>maven-compiler-plugin</artifactId>
58+
<version>${compiler-plugin.version}</version>
59+
</plugin>
60+
<plugin>
61+
<artifactId>maven-surefire-plugin</artifactId>
62+
<version>${surefire-plugin.version}</version>
63+
<configuration>
64+
<systemProperties>
65+
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
66+
</systemProperties>
67+
</configuration>
68+
</plugin>
69+
</plugins>
70+
</build>
71+
</project>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# configure datasource
2+
#quarkus.datasource.url=jdbc:h2:tcp://localhost/~/test
3+
quarkus.datasource.url=jdbc:h2:mem:testdb
4+
quarkus.datasource.driver=org.h2.Driver
5+
quarkus.datasource.username=sa
6+
quarkus.datasource.password=
7+
8+
#quarkus
9+
quarkus.liquibase.change-log=db/liquibase-changelog-master.xml
10+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<databaseChangeLog
4+
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
5+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6+
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
7+
8+
<changeSet id="1" author="baeldung">
9+
<createTable tableName="person">
10+
<column name="id" type="int" autoIncrement="true">
11+
<constraints primaryKey="true" nullable="false"/>
12+
</column>
13+
<column name="firstname" type="varchar(50)"/>
14+
<column name="lastname" type="varchar(50)">
15+
<constraints nullable="false"/>
16+
</column>
17+
<column name="state" type="char(2)"/>
18+
</createTable>
19+
</changeSet>
20+
21+
</databaseChangeLog>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>quarkus-liquibase-parent</artifactId>
7+
<groupId>com.baeldung.quarkus.liquibase</groupId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
<name>Quarkus - Liquibase - Deployment</name>
12+
13+
<artifactId>quarkus-liquibase-deployment</artifactId>
14+
15+
<dependencies>
16+
17+
<dependency>
18+
<groupId>io.quarkus</groupId>
19+
<artifactId>quarkus-core-deployment</artifactId>
20+
<version>${quarkus.version}</version>
21+
</dependency>
22+
<dependency>
23+
<groupId>io.quarkus</groupId>
24+
<artifactId>quarkus-arc-deployment</artifactId>
25+
<version>${quarkus.version}</version>
26+
</dependency>
27+
<dependency>
28+
<groupId>io.quarkus</groupId>
29+
<artifactId>quarkus-agroal-deployment</artifactId>
30+
<version>${quarkus.version}</version>
31+
</dependency>
32+
33+
<dependency>
34+
<groupId>com.baeldung.quarkus.liquibase</groupId>
35+
<artifactId>quarkus-liquibase</artifactId>
36+
<version>${project.version}</version>
37+
</dependency>
38+
39+
</dependencies>
40+
41+
<build>
42+
<plugins>
43+
<plugin>
44+
<groupId>org.apache.maven.plugins</groupId>
45+
<artifactId>maven-compiler-plugin</artifactId>
46+
<version>3.8.1</version>
47+
<configuration>
48+
<annotationProcessorPaths>
49+
<path>
50+
<groupId>io.quarkus</groupId>
51+
<artifactId>quarkus-extension-processor</artifactId>
52+
<version>${quarkus.version}</version>
53+
</path>
54+
</annotationProcessorPaths>
55+
</configuration>
56+
</plugin>
57+
</plugins>
58+
</build>
59+
60+
61+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.baeldung.quarkus.liquibase;
2+
3+
import io.quarkus.agroal.deployment.DataSourceInitializedBuildItem;
4+
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
5+
import io.quarkus.arc.deployment.BeanContainerBuildItem;
6+
import io.quarkus.arc.deployment.BeanContainerListenerBuildItem;
7+
import io.quarkus.deployment.annotations.BuildProducer;
8+
import io.quarkus.deployment.annotations.BuildStep;
9+
import io.quarkus.deployment.annotations.ExecutionTime;
10+
import io.quarkus.deployment.annotations.Record;
11+
import io.quarkus.deployment.builditem.FeatureBuildItem;
12+
import liquibase.exception.LiquibaseException;
13+
14+
public class LiquibaseProcessor {
15+
16+
private LiquibaseConfig liquibaseConfig;
17+
18+
@Record(ExecutionTime.STATIC_INIT)
19+
@BuildStep
20+
void build(BuildProducer<AdditionalBeanBuildItem> additionalBeanProducer,
21+
BuildProducer<FeatureBuildItem> featureProducer,
22+
LiquibaseRecorder recorder,
23+
BuildProducer<BeanContainerListenerBuildItem> containerListenerProducer,
24+
DataSourceInitializedBuildItem dataSourceInitializedBuildItem) {
25+
26+
featureProducer.produce(new FeatureBuildItem("liquibase"));
27+
28+
AdditionalBeanBuildItem unremovableProducer = AdditionalBeanBuildItem.unremovableOf(LiquibaseProducer.class);
29+
additionalBeanProducer.produce(unremovableProducer);
30+
31+
containerListenerProducer.produce(
32+
new BeanContainerListenerBuildItem(recorder.setLiquibaseConfig(liquibaseConfig)));
33+
}
34+
35+
@Record(ExecutionTime.RUNTIME_INIT)
36+
@BuildStep
37+
void processMigration(LiquibaseRecorder recorder, BeanContainerBuildItem beanContainer) throws LiquibaseException {
38+
recorder.migrate(beanContainer.getValue());
39+
}
40+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.baeldung.quarkus.liquibase</groupId>
8+
<artifactId>quarkus-liquibase-parent</artifactId>
9+
<version>1.0-SNAPSHOT</version>
10+
<name>Quarkus - Liquibase</name>
11+
<packaging>pom</packaging>
12+
13+
<properties>
14+
<maven.compiler.source>1.8</maven.compiler.source>
15+
<maven.compiler.target>1.8</maven.compiler.target>
16+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
17+
<quarkus.version>1.0.0.Final</quarkus.version>
18+
</properties>
19+
20+
<modules>
21+
<module>runtime</module>
22+
<module>deployment</module>
23+
</modules>
24+
25+
</project>
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<groupId>com.baeldung.quarkus.liquibase</groupId>
7+
<artifactId>quarkus-liquibase-parent</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
<name>Quarkus - Liquibase - Runtime</name>
12+
13+
<artifactId>quarkus-liquibase</artifactId>
14+
15+
<dependencies>
16+
<dependency>
17+
<groupId>io.quarkus</groupId>
18+
<artifactId>quarkus-core</artifactId>
19+
<version>${quarkus.version}</version>
20+
</dependency>
21+
<dependency>
22+
<groupId>io.quarkus</groupId>
23+
<artifactId>quarkus-agroal</artifactId>
24+
<version>${quarkus.version}</version>
25+
</dependency>
26+
<dependency>
27+
<groupId>org.liquibase</groupId>
28+
<artifactId>liquibase-core</artifactId>
29+
<version>3.8.1</version>
30+
</dependency>
31+
</dependencies>
32+
<build>
33+
<plugins>
34+
<plugin>
35+
<groupId>io.quarkus</groupId>
36+
<artifactId>quarkus-bootstrap-maven-plugin</artifactId>
37+
<version>${quarkus.version}</version>
38+
<executions>
39+
<execution>
40+
<goals>
41+
<goal>extension-descriptor</goal>
42+
</goals>
43+
<configuration>
44+
<deployment>${project.groupId}:${project.artifactId}-deployment:${project.version}
45+
</deployment>
46+
</configuration>
47+
</execution>
48+
</executions>
49+
</plugin>
50+
<plugin>
51+
<groupId>org.apache.maven.plugins</groupId>
52+
<artifactId>maven-compiler-plugin</artifactId>
53+
<version>3.8.1</version>
54+
<configuration>
55+
<annotationProcessorPaths>
56+
<path>
57+
<groupId>io.quarkus</groupId>
58+
<artifactId>quarkus-extension-processor</artifactId>
59+
<version>${quarkus.version}</version>
60+
</path>
61+
</annotationProcessorPaths>
62+
</configuration>
63+
</plugin>
64+
</plugins>
65+
</build>
66+
67+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.baeldung.quarkus.liquibase;
2+
3+
import io.quarkus.runtime.annotations.ConfigItem;
4+
import io.quarkus.runtime.annotations.ConfigPhase;
5+
import io.quarkus.runtime.annotations.ConfigRoot;
6+
7+
@ConfigRoot(name = "liquibase", phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
8+
public final class LiquibaseConfig {
9+
/**
10+
* master change log file
11+
*/
12+
@ConfigItem
13+
public String changeLog;
14+
}

0 commit comments

Comments
 (0)