[BAEL-3443] How To Write A Quarkus Extension (#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
This commit is contained in:
parent
d7adefab3f
commit
2a9171fbeb
1
pom.xml
1
pom.xml
@ -635,6 +635,7 @@
|
||||
<module>java-blockchain</module>
|
||||
<module>machine-learning</module>
|
||||
<module>wildfly</module>
|
||||
<module>quarkus-extension</module>
|
||||
</modules>
|
||||
|
||||
</profile>
|
||||
|
18
quarkus-extension/pom.xml
Normal file
18
quarkus-extension/pom.xml
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.baeldung.quarkus.extension</groupId>
|
||||
<artifactId>quarkus-extension</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>Quarkus - Liquibase Extension</name>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<modules>
|
||||
<module>quarkus-liquibase</module>
|
||||
<module>quarkus-app</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
71
quarkus-extension/quarkus-app/pom.xml
Normal file
71
quarkus-extension/quarkus-app/pom.xml
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0"?>
|
||||
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.baeldung.quarkus.app</groupId>
|
||||
<artifactId>quarkus-app</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<properties>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<surefire-plugin.version>2.22.0</surefire-plugin.version>
|
||||
<maven.compiler.parameters>true</maven.compiler.parameters>
|
||||
<quarkus.version>1.0.0.Final</quarkus.version>
|
||||
<compiler-plugin.version>3.8.1</compiler-plugin.version>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
</properties>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-universe-bom</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.baeldung.quarkus.liquibase</groupId>
|
||||
<artifactId>quarkus-liquibase</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-jdbc-h2</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-maven-plugin</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>build</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>${compiler-plugin.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${surefire-plugin.version}</version>
|
||||
<configuration>
|
||||
<systemProperties>
|
||||
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
|
||||
</systemProperties>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,10 @@
|
||||
# configure datasource
|
||||
#quarkus.datasource.url=jdbc:h2:tcp://localhost/~/test
|
||||
quarkus.datasource.url=jdbc:h2:mem:testdb
|
||||
quarkus.datasource.driver=org.h2.Driver
|
||||
quarkus.datasource.username=sa
|
||||
quarkus.datasource.password=
|
||||
|
||||
#quarkus
|
||||
quarkus.liquibase.change-log=db/liquibase-changelog-master.xml
|
||||
|
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<databaseChangeLog
|
||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
|
||||
|
||||
<changeSet id="1" author="baeldung">
|
||||
<createTable tableName="person">
|
||||
<column name="id" type="int" autoIncrement="true">
|
||||
<constraints primaryKey="true" nullable="false"/>
|
||||
</column>
|
||||
<column name="firstname" type="varchar(50)"/>
|
||||
<column name="lastname" type="varchar(50)">
|
||||
<constraints nullable="false"/>
|
||||
</column>
|
||||
<column name="state" type="char(2)"/>
|
||||
</createTable>
|
||||
</changeSet>
|
||||
|
||||
</databaseChangeLog>
|
61
quarkus-extension/quarkus-liquibase/deployment/pom.xml
Normal file
61
quarkus-extension/quarkus-liquibase/deployment/pom.xml
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>quarkus-liquibase-parent</artifactId>
|
||||
<groupId>com.baeldung.quarkus.liquibase</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<name>Quarkus - Liquibase - Deployment</name>
|
||||
|
||||
<artifactId>quarkus-liquibase-deployment</artifactId>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-core-deployment</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-arc-deployment</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-agroal-deployment</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.baeldung.quarkus.liquibase</groupId>
|
||||
<artifactId>quarkus-liquibase</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-extension-processor</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
@ -0,0 +1,40 @@
|
||||
package com.baeldung.quarkus.liquibase;
|
||||
|
||||
import io.quarkus.agroal.deployment.DataSourceInitializedBuildItem;
|
||||
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
|
||||
import io.quarkus.arc.deployment.BeanContainerBuildItem;
|
||||
import io.quarkus.arc.deployment.BeanContainerListenerBuildItem;
|
||||
import io.quarkus.deployment.annotations.BuildProducer;
|
||||
import io.quarkus.deployment.annotations.BuildStep;
|
||||
import io.quarkus.deployment.annotations.ExecutionTime;
|
||||
import io.quarkus.deployment.annotations.Record;
|
||||
import io.quarkus.deployment.builditem.FeatureBuildItem;
|
||||
import liquibase.exception.LiquibaseException;
|
||||
|
||||
public class LiquibaseProcessor {
|
||||
|
||||
private LiquibaseConfig liquibaseConfig;
|
||||
|
||||
@Record(ExecutionTime.STATIC_INIT)
|
||||
@BuildStep
|
||||
void build(BuildProducer<AdditionalBeanBuildItem> additionalBeanProducer,
|
||||
BuildProducer<FeatureBuildItem> featureProducer,
|
||||
LiquibaseRecorder recorder,
|
||||
BuildProducer<BeanContainerListenerBuildItem> containerListenerProducer,
|
||||
DataSourceInitializedBuildItem dataSourceInitializedBuildItem) {
|
||||
|
||||
featureProducer.produce(new FeatureBuildItem("liquibase"));
|
||||
|
||||
AdditionalBeanBuildItem unremovableProducer = AdditionalBeanBuildItem.unremovableOf(LiquibaseProducer.class);
|
||||
additionalBeanProducer.produce(unremovableProducer);
|
||||
|
||||
containerListenerProducer.produce(
|
||||
new BeanContainerListenerBuildItem(recorder.setLiquibaseConfig(liquibaseConfig)));
|
||||
}
|
||||
|
||||
@Record(ExecutionTime.RUNTIME_INIT)
|
||||
@BuildStep
|
||||
void processMigration(LiquibaseRecorder recorder, BeanContainerBuildItem beanContainer) throws LiquibaseException {
|
||||
recorder.migrate(beanContainer.getValue());
|
||||
}
|
||||
}
|
25
quarkus-extension/quarkus-liquibase/pom.xml
Normal file
25
quarkus-extension/quarkus-liquibase/pom.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.baeldung.quarkus.liquibase</groupId>
|
||||
<artifactId>quarkus-liquibase-parent</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<name>Quarkus - Liquibase</name>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>1.8</maven.compiler.source>
|
||||
<maven.compiler.target>1.8</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<quarkus.version>1.0.0.Final</quarkus.version>
|
||||
</properties>
|
||||
|
||||
<modules>
|
||||
<module>runtime</module>
|
||||
<module>deployment</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
67
quarkus-extension/quarkus-liquibase/runtime/pom.xml
Normal file
67
quarkus-extension/quarkus-liquibase/runtime/pom.xml
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>com.baeldung.quarkus.liquibase</groupId>
|
||||
<artifactId>quarkus-liquibase-parent</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<name>Quarkus - Liquibase - Runtime</name>
|
||||
|
||||
<artifactId>quarkus-liquibase</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-core</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-agroal</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.liquibase</groupId>
|
||||
<artifactId>liquibase-core</artifactId>
|
||||
<version>3.8.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-bootstrap-maven-plugin</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>extension-descriptor</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<deployment>${project.groupId}:${project.artifactId}-deployment:${project.version}
|
||||
</deployment>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>io.quarkus</groupId>
|
||||
<artifactId>quarkus-extension-processor</artifactId>
|
||||
<version>${quarkus.version}</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
@ -0,0 +1,14 @@
|
||||
package com.baeldung.quarkus.liquibase;
|
||||
|
||||
import io.quarkus.runtime.annotations.ConfigItem;
|
||||
import io.quarkus.runtime.annotations.ConfigPhase;
|
||||
import io.quarkus.runtime.annotations.ConfigRoot;
|
||||
|
||||
@ConfigRoot(name = "liquibase", phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
|
||||
public final class LiquibaseConfig {
|
||||
/**
|
||||
* master change log file
|
||||
*/
|
||||
@ConfigItem
|
||||
public String changeLog;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.baeldung.quarkus.liquibase;
|
||||
|
||||
import io.agroal.api.AgroalDataSource;
|
||||
import liquibase.Liquibase;
|
||||
import liquibase.database.jvm.JdbcConnection;
|
||||
import liquibase.resource.ClassLoaderResourceAccessor;
|
||||
import liquibase.resource.ResourceAccessor;
|
||||
|
||||
import javax.enterprise.context.ApplicationScoped;
|
||||
import javax.enterprise.inject.Produces;
|
||||
import javax.inject.Inject;
|
||||
|
||||
@ApplicationScoped
|
||||
public class LiquibaseProducer {
|
||||
|
||||
@Inject
|
||||
AgroalDataSource dataSource;
|
||||
|
||||
private LiquibaseConfig liquibaseConfig;
|
||||
|
||||
@Produces
|
||||
public Liquibase produceLiquibase() throws Exception {
|
||||
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
|
||||
ResourceAccessor classLoaderResourceAccessor = new ClassLoaderResourceAccessor(classLoader);
|
||||
Liquibase liquibase = new Liquibase(liquibaseConfig.changeLog, classLoaderResourceAccessor, new JdbcConnection(dataSource.getConnection()));
|
||||
return liquibase;
|
||||
}
|
||||
|
||||
public void setLiquibaseConfig(LiquibaseConfig liquibaseConfig) {
|
||||
this.liquibaseConfig = liquibaseConfig;
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
package com.baeldung.quarkus.liquibase;
|
||||
|
||||
import io.quarkus.arc.runtime.BeanContainer;
|
||||
import io.quarkus.arc.runtime.BeanContainerListener;
|
||||
import io.quarkus.runtime.annotations.Recorder;
|
||||
import liquibase.Contexts;
|
||||
import liquibase.Liquibase;
|
||||
import liquibase.exception.LiquibaseException;
|
||||
|
||||
@Recorder
|
||||
public class LiquibaseRecorder {
|
||||
|
||||
public BeanContainerListener setLiquibaseConfig(LiquibaseConfig liquibaseConfig) {
|
||||
return beanContainer -> {
|
||||
LiquibaseProducer producer = beanContainer.instance(LiquibaseProducer.class);
|
||||
producer.setLiquibaseConfig(liquibaseConfig);
|
||||
};
|
||||
}
|
||||
|
||||
public void migrate(BeanContainer container) throws LiquibaseException {
|
||||
Liquibase liquibase = container.instance(Liquibase.class);
|
||||
liquibase.update(new Contexts());
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user