= spring-cloud-dataflow-apps-generator-plugin
Maven plugin for generating https://github.com/spring-cloud/stream-applications[Spring Cloud Stream Applications].
It generates a separate maven project for every configured binder.
Plugin `Application` section helps to configure the application project independently form the Binders that can be used.
The `Binders` section helps to define the Binder specific configurations, that are merged to the `Application` configurations to generate the binder specific maven projects.
The `Global` section (e.g. `global.application` and `global.binders`) helps to define configurations sharable between many Applications and Binders.
As the following diagram illustrates, both the `Application` and the
`Binder` allow configuring various application and maven properties:
image::src/main/resources/doc/MojoConfiguration.jpg[]
== Build
Java 17 required.
[source, bash]
----
mvn clean package
----
== Sample Configuration
In the parent POM define the `Application` and `Binder` configurations common for all applications to be generated.
Do this under the `pluginManagement` pom section and use the plugin's `global` configuration:
[source, xml]
----
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dataflow-apps-generator-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<executions>
<execution>
<id>app-gen</id>
<phase>package</phase>
<goals>
<goal>generate-app</goal>
</goals>
</execution>
</executions>
<configuration>
<generatedProjectHome>${basedir}/apps</generatedProjectHome>
<global>
<application>
<bootVersion>${spring-boot.version}</bootVersion>
<containerImage>
<orgName>yourOrgNameGoesHere</orgName>
<enableMetadata>true</enableMetadata>
</containerImage>
<properties>
<!-- Your common properties go here -->
</properties>
<metadata>
<mavenPluginVersion>1.1.0-SNAPSHOT</mavenPluginVersion>
</metadata>
<maven>
<dependencyManagement>
<!-- Your dependency mgmt goes here -->
</dependencyManagement>
<dependencies>
<!-- Your dependencies go here -->
</dependencies>
</maven>
</application>
<binders>
<kafka>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-kafka</artifactId>
</dependency>
</dependencies>
</maven>
</kafka>
<rabbit>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
</dependencies>
</maven>
</rabbit>
</binders>
</global>
</configuration>
</plugin>
</plugins>
</pluginManagement>
----
Above global configurations will be reused by all children applications.
In addition, the child application can add application specific configurations, contributed to the inherited from
to the global:
[source, xml]
----
<plugins>
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dataflow-apps-generator-plugin</artifactId>
<version>1.1.0-SNAPSHOT</version>
<configuration>
<application>
<name>syslog</name>
<type>source</type>
<version>${project.version}</version>
<configClass>org.springframework.cloud.fn.supplier.syslog.SyslogSupplierConfiguration.class</configClass>
<maven>
<dependencies>
<dependency>
<groupId>org.springframework.cloud.fn</groupId>
<artifactId>syslog-supplier</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud.stream.app</groupId>
<artifactId>stream-applications-composite-function-support</artifactId>
<version>${stream-apps-core.version}</version>
</dependency>
</dependencies>
</maven>
</application>
</configuration>
</plugin>
</plugins>
----