diff --git a/.github/stream-apps-release-files-spec.json b/.github/stream-apps-release-files-spec.json index af60b75e8..69136223a 100644 --- a/.github/stream-apps-release-files-spec.json +++ b/.github/stream-apps-release-files-spec.json @@ -20,6 +20,15 @@ { "name": {"$match": "*.jar"} }, + { + "name": {"$match": "*stream-applications-descriptor-*.stream-apps-pulsar-maven"} + }, + { + "name": {"$match": "*stream-applications-descriptor-*.stream-apps-pulsar-docker"} + }, + { + "name": {"$match": "*stream-applications-descriptor-*.stream-apps-pulsar-harbor"} + }, { "name": {"$match": "*stream-applications-descriptor-*.stream-apps-kafka-maven"} }, @@ -38,6 +47,9 @@ { "name": {"$match": "*stream-applications-descriptor-*.stream-apps-rabbit-harbor"} }, + { + "name": {"$match": "*stream-applications-descriptor-*.pulsar-apps-maven-repo-url.properties"} + }, { "name": {"$match": "*stream-applications-descriptor-*.kafka-apps-maven-repo-url.properties"} }, diff --git a/.github/workflows/common.yml b/.github/workflows/common.yml index 953bcc4b6..83b088cd1 100644 --- a/.github/workflows/common.yml +++ b/.github/workflows/common.yml @@ -732,10 +732,14 @@ jobs: jfrog rt upload "$SRC_ROOT/kafka-apps-maven.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-kafka-maven" jfrog rt upload "$SRC_ROOT/kafka-apps-docker.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-kafka-docker" jfrog rt upload "$SRC_ROOT/kafka-apps-harbor.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-kafka-harbor" + jfrog rt upload "$SRC_ROOT/pulsar-apps-maven.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-pulsar-maven" + jfrog rt upload "$SRC_ROOT/pulsar-apps-docker.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-pulsar-docker" + jfrog rt upload "$SRC_ROOT/pulsar-apps-harbor.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-pulsar-harbor" jfrog rt upload "$SRC_ROOT/rabbit-apps-maven.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-rabbit-maven" jfrog rt upload "$SRC_ROOT/rabbit-apps-docker.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-rabbit-docker" jfrog rt upload "$SRC_ROOT/rabbit-apps-harbor.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-rabbit-harbor" jfrog rt upload "$SRC_ROOT/kafka-apps-maven-repo-url.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.kafka-apps-maven-repo-url.properties" + jfrog rt upload "$SRC_ROOT/pulsar-apps-maven-repo-url.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.pulsar-apps-maven-repo-url.properties" jfrog rt upload "$SRC_ROOT/rabbit-apps-maven-repo-url.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.rabbit-apps-maven-repo-url.properties" - name: Set Stream Applications Docs Properties for ${{ needs.parameters.outputs.release_train_version }} diff --git a/.github/workflows/descriptor.yml b/.github/workflows/descriptor.yml index 184dc0974..37213bbc9 100644 --- a/.github/workflows/descriptor.yml +++ b/.github/workflows/descriptor.yml @@ -202,9 +202,13 @@ jobs: jfrog rt upload "$SRC_ROOT/kafka-apps-maven.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-kafka-maven" jfrog rt upload "$SRC_ROOT/kafka-apps-docker.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-kafka-docker" jfrog rt upload "$SRC_ROOT/kafka-apps-harbor.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-kafka-harbor" + jfrog rt upload "$SRC_ROOT/pulsar-apps-maven.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-pulsar-maven" + jfrog rt upload "$SRC_ROOT/pulsar-apps-docker.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-pulsar-docker" + jfrog rt upload "$SRC_ROOT/pulsar-apps-harbor.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-pulsar-harbor" jfrog rt upload "$SRC_ROOT/rabbit-apps-maven.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-rabbit-maven" jfrog rt upload "$SRC_ROOT/rabbit-apps-docker.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-rabbit-docker" jfrog rt upload "$SRC_ROOT/rabbit-apps-harbor.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.stream-apps-rabbit-harbor" jfrog rt upload "$SRC_ROOT/kafka-apps-maven-repo-url.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.kafka-apps-maven-repo-url.properties" + jfrog rt upload "$SRC_ROOT/pulsar-apps-maven-repo-url.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.pulsar-apps-maven-repo-url.properties" jfrog rt upload "$SRC_ROOT/rabbit-apps-maven-repo-url.properties" "${TARGET_REPO}/stream-applications-descriptor-${RELEASE_TRAIN_VERSION}.rabbit-apps-maven-repo-url.properties" popd > /dev/null diff --git a/applications/stream-applications-core/pom.xml b/applications/stream-applications-core/pom.xml index 242c09846..efa263a08 100644 --- a/applications/stream-applications-core/pom.xml +++ b/applications/stream-applications-core/pom.xml @@ -253,6 +253,16 @@ + + + + + org.springframework.cloud + spring-cloud-stream-binder-pulsar + + + + diff --git a/applications/stream-applications-core/stream-applications-test-support/pom.xml b/applications/stream-applications-core/stream-applications-test-support/pom.xml index 09f2a3120..e839105ed 100644 --- a/applications/stream-applications-core/stream-applications-test-support/pom.xml +++ b/applications/stream-applications-core/stream-applications-test-support/pom.xml @@ -39,6 +39,10 @@ org.springframework.kafka spring-kafka + + org.springframework.pulsar + spring-pulsar + org.springframework.amqp spring-rabbit @@ -62,6 +66,11 @@ kafka compile + + org.testcontainers + pulsar + compile + org.testcontainers rabbitmq diff --git a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/BaseContainerExtension.java b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/BaseContainerExtension.java index fb064e636..ebe429b1f 100644 --- a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/BaseContainerExtension.java +++ b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/BaseContainerExtension.java @@ -30,6 +30,7 @@ import org.springframework.cloud.stream.app.test.integration.StreamAppContainer; import org.springframework.cloud.stream.app.test.integration.StreamAppContainerTestUtils; import org.springframework.cloud.stream.app.test.integration.kafka.KafkaStreamAppContainer; +import org.springframework.cloud.stream.app.test.integration.pulsar.PulsarStreamAppContainer; import org.springframework.cloud.stream.app.test.integration.rabbitmq.RabbitMQStreamAppContainer; import org.springframework.core.annotation.AnnotatedElementUtils; @@ -59,6 +60,9 @@ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext ext String version = getVersion(annotation); switch (annotation.binder()) { + case Pulsar: + baseContainer = new PulsarStreamAppContainer( + StreamAppContainerTestUtils.imageName(annotation.repository(), annotation.name(), version)); case Kafka: baseContainer = new KafkaStreamAppContainer( StreamAppContainerTestUtils.imageName(annotation.repository(), annotation.name(), version)); diff --git a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/Binder.java b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/Binder.java index a7dc2d3da..e3670337b 100644 --- a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/Binder.java +++ b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/junit/jupiter/Binder.java @@ -30,4 +30,10 @@ public enum Binder { * RabbitMQ Binder. */ RabbitMQ, + + + /** + * Pulsar Binder. + */ + Pulsar, } diff --git a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarConfig.java b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarConfig.java new file mode 100644 index 000000000..78b9d9f46 --- /dev/null +++ b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarConfig.java @@ -0,0 +1,49 @@ +/* + * Copyright 2020-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.stream.app.test.integration.pulsar; + +import java.time.Duration; + +import org.testcontainers.containers.Network; +import org.testcontainers.containers.PulsarContainer; +import org.testcontainers.utility.DockerImageName; + +/** + * Initializes and starts a {@link PulsarContainer}. + * + * @author David Turanski + * @author Artem Bilan + * @author Corneil du Plessis + */ +public abstract class PulsarConfig { + + + /** + * The PulsarContainer. + */ + public final static PulsarContainer pulsar = new PulsarContainer( + DockerImageName.parse("apachepulsar/pulsar-all")) + .withExposedPorts(6065, 8080) + .withNetwork(Network.SHARED) + .withStartupTimeout(Duration.ofSeconds(120)) + .withStartupAttempts(3); + + static { + pulsar.start(); + } + +} diff --git a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamAppContainer.java b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamAppContainer.java new file mode 100644 index 000000000..6d86ea7ae --- /dev/null +++ b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamAppContainer.java @@ -0,0 +1,42 @@ +/* + * Copyright 2020-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.stream.app.test.integration.pulsar; + +import org.springframework.cloud.stream.app.test.integration.StreamAppContainer; + +/** + * An implementation of + * {@link StreamAppContainer} for + * pulsar. This provides the required broker connection properties. + * @author David Turanski + */ +public class PulsarStreamAppContainer extends StreamAppContainer { + + /** + * @param imageName the image name. + */ + public PulsarStreamAppContainer(String imageName) { + super(imageName, PulsarConfig.pulsar); + } + + @Override + protected StreamAppContainer withBinderProperties() { + this.withEnv("SPRING_CLOUD_STREAM_PULSAR_BINDER_BROKERS", + messageBrokerContainer.getNetworkAliases().get(0) + ":6065"); + return this; + } +} diff --git a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamAppContainerTestConfiguration.java b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamAppContainerTestConfiguration.java new file mode 100644 index 000000000..03417150d --- /dev/null +++ b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamAppContainerTestConfiguration.java @@ -0,0 +1,178 @@ +/* + * Copyright 2020-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.stream.app.test.integration.pulsar; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.function.Function; + +import org.apache.pulsar.client.admin.PulsarAdmin; +import org.apache.pulsar.client.admin.internal.PulsarAdminBuilderImpl; +import org.apache.pulsar.client.api.PulsarClient; +import org.apache.pulsar.client.api.PulsarClientException; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.cloud.stream.app.test.integration.AbstractTestTopicListener; +import org.springframework.cloud.stream.app.test.integration.MessageMatcher; +import org.springframework.cloud.stream.app.test.integration.OutputMatcher; +import org.springframework.cloud.stream.app.test.integration.TestTopicListener; +import org.springframework.cloud.stream.app.test.integration.TestTopicSender; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.Message; +import org.springframework.pulsar.annotation.EnablePulsar; +import org.springframework.pulsar.annotation.PulsarListener; +import org.springframework.pulsar.config.ConcurrentPulsarListenerContainerFactory; +import org.springframework.pulsar.config.PulsarListenerEndpointRegistry; +import org.springframework.pulsar.core.ConsumerBuilderCustomizer; +import org.springframework.pulsar.core.DefaultPulsarConsumerFactory; +import org.springframework.pulsar.core.DefaultPulsarProducerFactory; +import org.springframework.pulsar.core.PulsarConsumerFactory; +import org.springframework.pulsar.core.PulsarProducerFactory; +import org.springframework.pulsar.core.PulsarTemplate; +import org.springframework.pulsar.listener.PulsarContainerProperties; +import org.springframework.pulsar.support.PulsarHeaders; + +import static org.springframework.cloud.stream.app.test.integration.AbstractTestTopicListener.STREAM_APPLICATIONS_TEST_TOPIC; + +/** + * Spring configuration for testing {@link PulsarStreamAppContainer}s. + * @author David Turanski + */ +@Configuration +@EnablePulsar +public class PulsarStreamAppContainerTestConfiguration { + + private static final String SUFFIX = UUID.randomUUID().toString().substring(0, 8); + + private static final String STREAM_APPLICATION_TESTS_GROUP = "stream-application-tests_" + SUFFIX; + + @Bean + public PulsarClient pulsarClient(@Value("${spring.pulsar.client.service-url}") String serviceUrl) throws Exception { + return PulsarClient.builder() + .serviceUrl(serviceUrl) + .build(); + } + + @Bean + public PulsarProducerFactory pulsarProducerFactory(PulsarClient pulsarClient) { + return new DefaultPulsarProducerFactory<>(pulsarClient); + } + + @Bean + public PulsarTemplate pulsarTemplate(PulsarProducerFactory producerFactory) { + return new PulsarTemplate<>(producerFactory); + } + + @Bean + public OutputMatcher outputMatcher(TestTopicListener testTopicListener) { + return new OutputMatcher(testTopicListener); + } + + @Bean + public TestTopicSender testTopicSender(PulsarTemplate pulsarTemplate) { + return new PulsarTemplateTopicSender(pulsarTemplate); + } + + @Bean("pulsarConsumerFactory") + public PulsarConsumerFactory consumerFactory(PulsarClient pulsarClient) { + Map configs = new HashMap<>(); + ConsumerBuilderCustomizer consumerBuilderCustomizer = (builder) -> { + builder.topic(STREAM_APPLICATIONS_TEST_TOPIC); + builder.subscriptionName(STREAM_APPLICATION_TESTS_GROUP); + }; + return new DefaultPulsarConsumerFactory<>(pulsarClient, List.of(consumerBuilderCustomizer)); + } + + @Bean + public ConcurrentPulsarListenerContainerFactory pulsarListenerContainerFactory( + @Value("pulsarConsumerFactory") PulsarConsumerFactory consumerFactory) { + return new ConcurrentPulsarListenerContainerFactory<>(consumerFactory, new PulsarContainerProperties()); + } + + @Bean + public PulsarProducerFactory producerFactory(PulsarClient pulsarClient) { + return new DefaultPulsarProducerFactory<>(pulsarClient, STREAM_APPLICATIONS_TEST_TOPIC); + + } + + @Bean + public PulsarAdmin admin(@Value("${spring.pulsar.admin.service-url}") String adminUrl) throws PulsarClientException { + PulsarAdminBuilderImpl adminBuilder = new PulsarAdminBuilderImpl(); + adminBuilder.serviceHttpUrl(adminUrl); + return adminBuilder.build(); + } + + @Bean + public PulsarListenerEndpointRegistry pulsarListenerEndpointRegistry() { + return new PulsarListenerEndpointRegistry(); + } + + @Bean + public PulsarTestListener testListener(PulsarListenerEndpointRegistry endpointRegistry) { + return new PulsarTestListener(endpointRegistry); + } + + @PulsarListener(autoStartup = "true", topicPattern = STREAM_APPLICATIONS_TEST_TOPIC) + static class PulsarTestListener extends AbstractTestTopicListener { + + PulsarTestListener(PulsarListenerEndpointRegistry endpointRegistry) { + super(); + } + + @Override + public boolean addMessageMatcher(String topic, MessageMatcher messageMatcher) { + return super.addMessageMatcher(topic, messageMatcher); + } + + @Override + protected Function, String> topicForMessage() { + return message -> (String) message.getHeaders().get(PulsarHeaders.TOPIC_NAME); + } + + @PulsarListener + public void listen(Message message) { + super.listen(message); + } + } + + static class PulsarTemplateTopicSender implements TestTopicSender { + + private final PulsarTemplate pulsarTemplate; + + PulsarTemplateTopicSender(PulsarTemplate pulsarTemplate) { + this.pulsarTemplate = pulsarTemplate; + } + + @Override + public

void send(String topic, P payload) { + doSend(topic, payload); + } + + @Override + public void send(String topic, Message message) { + doSend(topic, message); + } + + private void doSend(String topic, Object payload) { + pulsarTemplate.send(topic, payload); + } + } + +} diff --git a/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamApps.java b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamApps.java new file mode 100644 index 000000000..b89f35409 --- /dev/null +++ b/applications/stream-applications-core/stream-applications-test-support/src/main/java/org/springframework/cloud/stream/app/test/integration/pulsar/PulsarStreamApps.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.stream.app.test.integration.pulsar; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import org.testcontainers.containers.GenericContainer; + +import org.springframework.cloud.stream.app.test.integration.StreamApps; +/** + * Configures an end to end Stream (source, processor(s), sink) using + * {@link PulsarStreamAppContainer}s. + * @author David Turanski + */ +public class PulsarStreamApps extends StreamApps { + + protected PulsarStreamApps(GenericContainer sourceContainer, List processorContainers, GenericContainer sinkContainer) { + super(sourceContainer, processorContainers, sinkContainer); + } + + public static Builder pulsarStreamApps(String streamName, GenericContainer messageBrokerContainer) { + return new PulsarBuilder(streamName, messageBrokerContainer); + } + + public static final class PulsarBuilder extends Builder { + + protected PulsarBuilder(String streamName, GenericContainer messageBrokerContainer) { + super(streamName, messageBrokerContainer); + } + + protected Map binderProperties() { + return Collections.singletonMap("SPRING_CLOUD_STREAM_PULSAR_BINDER_BROKERS", + messageBrokerContainer.getNetworkAliases().get(0) + ":6065"); + } + + @Override + protected PulsarStreamApps doBuild(GenericContainer sourceContainer, List processorContainers, GenericContainer sinkContainer) { + return new PulsarStreamApps(sourceContainer, processorContainers, sinkContainer); + } + } +} diff --git a/run-ITs.sh b/run-ITs.sh index b88d626b1..daf9e21a3 100755 --- a/run-ITs.sh +++ b/run-ITs.sh @@ -11,7 +11,7 @@ if [ "$STREAM_APPS_VERSION" == "" ]; then STREAM_APPS_VERSION=$($SCDIR/mvn-get-version.sh) fi CONTAINERS="s3-source sftp-source http-request-processor log-sink jdbc-source time-source http-source tcp-sink mongodb-sink" -BROKERS="rabbit kafka" +BROKERS="rabbit kafka pulsar" for container in $CONTAINERS; do for broker in $BROKERS; do echo "Pulling springcloudstream/${container}-${broker}:$STREAM_APPS_VERSION" diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java index 451c4d773..777e88480 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/java/org/springframework/cloud/dataflow/app/plugin/SpringCloudStreamAppGeneratorMojoTest.java @@ -101,9 +101,16 @@ public void prepareForTest() throws NoSuchFieldException { rabbitDep.setArtifactId("spring-cloud-stream-binder-rabbit"); rabbitBinder.getMaven().getDependencies().add(rabbitDep); + SpringCloudStreamAppGeneratorMojo.Binder pulsarBinder = new SpringCloudStreamAppGeneratorMojo.Binder(); + Dependency pulsarDep = new Dependency(); + pulsarDep.setGroupId("org.springframework.cloud"); + pulsarDep.setArtifactId("spring-cloud-stream-binder-pulsar"); + pulsarBinder.getMaven().getDependencies().add(pulsarDep); + Map binders = new HashMap<>(); binders.put("kafka", kafkaBinder); binders.put("rabbit", rabbitBinder); + binders.put("pulsar", pulsarBinder); setMojoProperty("binders", binders); diff --git a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml index 28ad2437c..1efb21e2e 100644 --- a/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml +++ b/spring-cloud-dataflow-apps-plugin/spring-cloud-dataflow-apps-generator-plugin/src/test/resources/unit/http-source-apps/pom.xml @@ -208,6 +208,26 @@ + + + + + org.springframework.cloud + spring-cloud-stream-binder-pulsar + + + + + + false + + bintray-binder + bintray-binder + https://dl.bintray.com/binder/maven + + + + diff --git a/stream-applications-release-train/stream-applications-descriptor/pom.xml b/stream-applications-release-train/stream-applications-descriptor/pom.xml index 9476c2902..3f1e8ae44 100644 --- a/stream-applications-release-train/stream-applications-descriptor/pom.xml +++ b/stream-applications-release-train/stream-applications-descriptor/pom.xml @@ -32,12 +32,17 @@ src/main/resources true + META-INF/pulsar-apps-maven.properties + META-INF/pulsar-apps-docker.properties + META-INF/pulsar-apps-harbor.properties + META-INF/rabbit-apps-maven.properties META-INF/kafka-apps-maven.properties META-INF/rabbit-apps-maven.properties META-INF/kafka-apps-docker.properties META-INF/kafka-apps-harbor.properties META-INF/rabbit-apps-docker.properties META-INF/rabbit-apps-harbor.properties + META-INF/pulsar-apps-maven-repo-url.properties META-INF/kafka-apps-maven-repo-url.properties META-INF/rabbit-apps-maven-repo-url.properties @@ -117,6 +122,18 @@ + + target/classes/META-INF/pulsar-apps-maven.properties + stream-apps-pulsar-maven + + + target/classes/META-INF/pulsar-apps-docker.properties + stream-apps-pulsar-docker + + + target/classes/META-INF/pulsar-apps-harbor.properties + stream-apps-pulsar-harbor + target/classes/META-INF/kafka-apps-maven.properties stream-apps-kafka-maven @@ -141,6 +158,10 @@ target/classes/META-INF/rabbit-apps-harbor.properties stream-apps-rabbit-harbor + + target/classes/META-INF/pulsar-apps-maven-repo-url.properties + pulsar-apps-maven-repo-url.properties + target/classes/META-INF/kafka-apps-maven-repo-url.properties kafka-apps-maven-repo-url.properties diff --git a/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-docker.properties b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-docker.properties new file mode 100644 index 000000000..a600387e4 --- /dev/null +++ b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-docker.properties @@ -0,0 +1,61 @@ +source.debezium=docker:springcloudstream/debezium-source-pulsar:@apps.docker.tag@ +source.file=docker:springcloudstream/file-source-pulsar:@apps.docker.tag@ +source.ftp=docker:springcloudstream/ftp-source-pulsar:@apps.docker.tag@ +source.http=docker:springcloudstream/http-source-pulsar:@apps.docker.tag@ +source.jdbc=docker:springcloudstream/jdbc-source-pulsar:@apps.docker.tag@ +source.kafka=docker:springcloudstream/kafka-source-pulsar:@apps.docker.tag@ +source.jms=docker:springcloudstream/jms-source-pulsar:@apps.docker.tag@ +source.load-generator=docker:springcloudstream/load-generator-source-pulsar:@apps.docker.tag@ +source.mail=docker:springcloudstream/mail-source-pulsar:@apps.docker.tag@ +source.mongodb=docker:springcloudstream/mongodb-source-pulsar:@apps.docker.tag@ +source.mqtt=docker:springcloudstream/mqtt-source-pulsar:@apps.docker.tag@ +source.rabbit=docker:springcloudstream/rabbit-source-pulsar:@apps.docker.tag@ +source.s3=docker:springcloudstream/s3-source-pulsar:@apps.docker.tag@ +source.sftp=docker:springcloudstream/sftp-source-pulsar:@apps.docker.tag@ +source.syslog=docker:springcloudstream/syslog-source-pulsar:@apps.docker.tag@ +source.tcp=docker:springcloudstream/tcp-source-pulsar:@apps.docker.tag@ +source.time=docker:springcloudstream/time-source-pulsar:@apps.docker.tag@ +source.twitter-message=docker:springcloudstream/twitter-message-source-pulsar:@apps.docker.tag@ +source.twitter-search=docker:springcloudstream/twitter-search-source-pulsar:@apps.docker.tag@ +source.twitter-stream=docker:springcloudstream/twitter-stream-source-pulsar:@apps.docker.tag@ +source.websocket=docker:springcloudstream/websocket-source-pulsar:@apps.docker.tag@ +source.xmpp=docker:springcloudstream/xmpp-source-pulsar:@apps.docker.tag@ +source.zeromq=docker:springcloudstream/zeromq-source-pulsar:@apps.docker.tag@ +sink.cassandra=docker:springcloudstream/cassandra-sink-pulsar:@apps.docker.tag@ +sink.analytics=docker:springcloudstream/analytics-sink-pulsar:@apps.docker.tag@ +sink.elasticsearch=docker:springcloudstream/elasticsearch-sink-pulsar:@apps.docker.tag@ +sink.wavefront=docker:springcloudstream/wavefront-sink-pulsar:@apps.docker.tag@ +sink.file=docker:springcloudstream/file-sink-pulsar:@apps.docker.tag@ +sink.ftp=docker:springcloudstream/ftp-sink-pulsar:@apps.docker.tag@ +sink.jdbc=docker:springcloudstream/jdbc-sink-pulsar:@apps.docker.tag@ +sink.kafka=docker:springcloudstream/kafka-sink-pulsar:@apps.docker.tag@ +sink.log=docker:springcloudstream/log-sink-pulsar:@apps.docker.tag@ +sink.mongodb=docker:springcloudstream/mongodb-sink-pulsar:@apps.docker.tag@ +sink.mqtt=docker:springcloudstream/mqtt-sink-pulsar:@apps.docker.tag@ +sink.pgcopy=docker:springcloudstream/pgcopy-sink-pulsar:@apps.docker.tag@ +sink.rabbit=docker:springcloudstream/rabbit-sink-pulsar:@apps.docker.tag@ +sink.redis=docker:springcloudstream/redis-sink-pulsar:@apps.docker.tag@ +sink.router=docker:springcloudstream/router-sink-pulsar:@apps.docker.tag@ +sink.rsocket=docker:springcloudstream/rsocket-sink-pulsar:@apps.docker.tag@ +sink.s3=docker:springcloudstream/s3-sink-pulsar:@apps.docker.tag@ +sink.sftp=docker:springcloudstream/sftp-sink-pulsar:@apps.docker.tag@ +sink.tcp=docker:springcloudstream/tcp-sink-pulsar:@apps.docker.tag@ +sink.throughput=docker:springcloudstream/throughput-sink-pulsar:@apps.docker.tag@ +sink.twitter-message=docker:springcloudstream/twitter-message-sink-pulsar:@apps.docker.tag@ +sink.twitter-update=docker:springcloudstream/twitter-update-sink-pulsar:@apps.docker.tag@ +sink.websocket=docker:springcloudstream/websocket-sink-pulsar:@apps.docker.tag@ +sink.xmpp=docker:springcloudstream/xmpp-sink-pulsar:@apps.docker.tag@ +sink.zeromq=docker:springcloudstream/zeromq-sink-pulsar:@apps.docker.tag@ +processor.aggregator=docker:springcloudstream/aggregator-processor-pulsar:@apps.docker.tag@ +processor.bridge=docker:springcloudstream/bridge-processor-pulsar:@apps.docker.tag@ +processor.filter=docker:springcloudstream/filter-processor-pulsar:@apps.docker.tag@ +processor.groovy=docker:springcloudstream/groovy-processor-pulsar:@apps.docker.tag@ +processor.header-enricher=docker:springcloudstream/header-enricher-processor-pulsar:@apps.docker.tag@ +processor.http-request=docker:springcloudstream/http-request-processor-pulsar:@apps.docker.tag@ +processor.image-recognition=docker:springcloudstream/image-recognition-processor-pulsar:@apps.docker.tag@ +processor.object-detection=docker:springcloudstream/object-detection-processor-pulsar:@apps.docker.tag@ +processor.semantic-segmentation=docker:springcloudstream/semantic-segmentation-processor-pulsar:@apps.docker.tag@ +processor.script=docker:springcloudstream/script-processor-pulsar:@apps.docker.tag@ +processor.splitter=docker:springcloudstream/splitter-processor-pulsar:@apps.docker.tag@ +processor.transform=docker:springcloudstream/transform-processor-pulsar:@apps.docker.tag@ +processor.twitter-trend=docker:springcloudstream/twitter-trend-processor-pulsar:@apps.docker.tag@ diff --git a/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-harbor.properties b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-harbor.properties new file mode 100644 index 000000000..68b16b523 --- /dev/null +++ b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-harbor.properties @@ -0,0 +1,61 @@ +source.debezium=docker:projects.registry.vmware.com/springcloudstream/debezium-source-pulsar:@apps.harbor.version@ +source.file=docker:projects.registry.vmware.com/springcloudstream/file-source-pulsar:@apps.harbor.version@ +source.ftp=docker:projects.registry.vmware.com/springcloudstream/ftp-source-pulsar:@apps.harbor.version@ +source.http=docker:projects.registry.vmware.com/springcloudstream/http-source-pulsar:@apps.harbor.version@ +source.jdbc=docker:projects.registry.vmware.com/springcloudstream/jdbc-source-pulsar:@apps.harbor.version@ +source.jms=docker:projects.registry.vmware.com/springcloudstream/jms-source-pulsar:@apps.harbor.version@ +source.kafka=docker:projects.registry.vmware.com/springcloudstream/kafka-source-pulsar:@apps.harbor.version@ +source.load-generator=docker:projects.registry.vmware.com/springcloudstream/load-generator-source-pulsar:@apps.harbor.version@ +source.mail=docker:projects.registry.vmware.com/springcloudstream/mail-source-pulsar:@apps.harbor.version@ +source.mongodb=docker:projects.registry.vmware.com/springcloudstream/mongodb-source-pulsar:@apps.harbor.version@ +source.mqtt=docker:projects.registry.vmware.com/springcloudstream/mqtt-source-pulsar:@apps.harbor.version@ +source.rabbit=docker:projects.registry.vmware.com/springcloudstream/rabbit-source-pulsar:@apps.harbor.version@ +source.s3=docker:projects.registry.vmware.com/springcloudstream/s3-source-pulsar:@apps.harbor.version@ +source.sftp=docker:projects.registry.vmware.com/springcloudstream/sftp-source-pulsar:@apps.harbor.version@ +source.syslog=docker:projects.registry.vmware.com/springcloudstream/syslog-source-pulsar:@apps.harbor.version@ +source.tcp=docker:projects.registry.vmware.com/springcloudstream/tcp-source-pulsar:@apps.harbor.version@ +source.time=docker:projects.registry.vmware.com/springcloudstream/time-source-pulsar:@apps.harbor.version@ +source.twitter-message=docker:projects.registry.vmware.com/springcloudstream/twitter-message-source-pulsar:@apps.harbor.version@ +source.twitter-search=docker:projects.registry.vmware.com/springcloudstream/twitter-search-source-pulsar:@apps.harbor.version@ +source.twitter-stream=docker:projects.registry.vmware.com/springcloudstream/twitter-stream-source-pulsar:@apps.harbor.version@ +source.websocket=docker:projects.registry.vmware.com/springcloudstream/websocket-source-pulsar:@apps.harbor.version@ +source.xmpp=docker:projects.registry.vmware.com/springcloudstream/xmpp-source-pulsar:@apps.harbor.version@ +source.zeromq=docker:projects.registry.vmware.com/springcloudstream/zeromq-source-pulsar:@apps.harbor.version@ +sink.cassandra=docker:projects.registry.vmware.com/springcloudstream/cassandra-sink-pulsar:@apps.harbor.version@ +sink.analytics=docker:projects.registry.vmware.com/springcloudstream/analytics-sink-pulsar:@apps.harbor.version@ +sink.elasticsearch=docker:projects.registry.vmware.com/springcloudstream/elasticsearch-sink-pulsar:@apps.harbor.version@ +sink.wavefront=docker:projects.registry.vmware.com/springcloudstream/wavefront-sink-pulsar:@apps.harbor.version@ +sink.file=docker:projects.registry.vmware.com/springcloudstream/file-sink-pulsar:@apps.harbor.version@ +sink.ftp=docker:projects.registry.vmware.com/springcloudstream/ftp-sink-pulsar:@apps.harbor.version@ +sink.jdbc=docker:projects.registry.vmware.com/springcloudstream/jdbc-sink-pulsar:@apps.harbor.version@ +sink.kafka=docker:projects.registry.vmware.com/springcloudstream/kafka-sink-pulsar:@apps.harbor.version@ +sink.log=docker:projects.registry.vmware.com/springcloudstream/log-sink-pulsar:@apps.harbor.version@ +sink.mongodb=docker:projects.registry.vmware.com/springcloudstream/mongodb-sink-pulsar:@apps.harbor.version@ +sink.mqtt=docker:projects.registry.vmware.com/springcloudstream/mqtt-sink-pulsar:@apps.harbor.version@ +sink.pgcopy=docker:projects.registry.vmware.com/springcloudstream/pgcopy-sink-pulsar:@apps.harbor.version@ +sink.rabbit=docker:projects.registry.vmware.com/springcloudstream/rabbit-sink-pulsar:@apps.harbor.version@ +sink.redis=docker:projects.registry.vmware.com/springcloudstream/redis-sink-pulsar:@apps.harbor.version@ +sink.router=docker:projects.registry.vmware.com/springcloudstream/router-sink-pulsar:@apps.harbor.version@ +sink.rsocket=docker:projects.registry.vmware.com/springcloudstream/rsocket-sink-pulsar:@apps.harbor.version@ +sink.s3=docker:projects.registry.vmware.com/springcloudstream/s3-sink-pulsar:@apps.harbor.version@ +sink.sftp=docker:projects.registry.vmware.com/springcloudstream/sftp-sink-pulsar:@apps.harbor.version@ +sink.tcp=docker:projects.registry.vmware.com/springcloudstream/tcp-sink-pulsar:@apps.harbor.version@ +sink.throughput=docker:projects.registry.vmware.com/springcloudstream/throughput-sink-pulsar:@apps.harbor.version@ +sink.twitter-message=docker:projects.registry.vmware.com/springcloudstream/twitter-message-sink-pulsar:@apps.harbor.version@ +sink.twitter-update=docker:projects.registry.vmware.com/springcloudstream/twitter-update-sink-pulsar:@apps.harbor.version@ +sink.websocket=docker:projects.registry.vmware.com/springcloudstream/websocket-sink-pulsar:@apps.harbor.version@ +sink.xmpp=docker:projects.registry.vmware.com/springcloudstream/xmpp-sink-pulsar:@apps.harbor.version@ +sink.zeromq=docker:projects.registry.vmware.com/springcloudstream/zeromq-sink-pulsar:@apps.harbor.version@ +processor.aggregator=docker:projects.registry.vmware.com/springcloudstream/aggregator-processor-pulsar:@apps.harbor.version@ +processor.bridge=docker:projects.registry.vmware.com/springcloudstream/bridge-processor-pulsar:@apps.harbor.version@ +processor.filter=docker:projects.registry.vmware.com/springcloudstream/filter-processor-pulsar:@apps.harbor.version@ +processor.groovy=docker:projects.registry.vmware.com/springcloudstream/groovy-processor-pulsar:@apps.harbor.version@ +processor.header-enricher=docker:projects.registry.vmware.com/springcloudstream/header-enricher-processor-pulsar:@apps.harbor.version@ +processor.http-request=docker:projects.registry.vmware.com/springcloudstream/http-request-processor-pulsar:@apps.harbor.version@ +processor.image-recognition=docker:projects.registry.vmware.com/springcloudstream/image-recognition-processor-pulsar:@apps.harbor.version@ +processor.object-detection=docker:projects.registry.vmware.com/springcloudstream/object-detection-processor-pulsar:@apps.harbor.version@ +processor.semantic-segmentation=docker:projects.registry.vmware.com/springcloudstream/semantic-segmentation-processor-pulsar:@apps.harbor.version@ +processor.script=docker:projects.registry.vmware.com/springcloudstream/script-processor-pulsar:@apps.harbor.version@ +processor.splitter=docker:projects.registry.vmware.com/springcloudstream/splitter-processor-pulsar:@apps.harbor.version@ +processor.transform=docker:projects.registry.vmware.com/springcloudstream/transform-processor-pulsar:@apps.harbor.version@ +processor.twitter-trend=docker:projects.registry.vmware.com/springcloudstream/twitter-trend-processor-pulsar:@apps.harbor.version@ diff --git a/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-maven-repo-url.properties b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-maven-repo-url.properties new file mode 100644 index 000000000..9e262648b --- /dev/null +++ b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-maven-repo-url.properties @@ -0,0 +1,122 @@ +source.debezium=https://@repo-spring-io@/org/springframework/cloud/stream/app/debezium-source-pulsar/@apps.version@/debezium-source-pulsar-@apps.version@.jar +source.debezium.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/debezium-source-pulsar/@apps.version@/debezium-source-pulsar-@apps.version@-metadata.jar +source.file=https://@repo-spring-io@/org/springframework/cloud/stream/app/file-source-pulsar/@apps.version@/file-source-pulsar-@apps.version@.jar +source.file.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/file-source-pulsar/@apps.version@/file-source-pulsar-@apps.version@-metadata.jar +source.ftp=https://@repo-spring-io@/org/springframework/cloud/stream/app/ftp-source-pulsar/@apps.version@/ftp-source-pulsar-@apps.version@.jar +source.ftp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/ftp-source-pulsar/@apps.version@/ftp-source-pulsar-@apps.version@-metadata.jar +source.http=https://@repo-spring-io@/org/springframework/cloud/stream/app/http-source-pulsar/@apps.version@/http-source-pulsar-@apps.version@.jar +source.http.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/http-source-pulsar/@apps.version@/http-source-pulsar-@apps.version@-metadata.jar +source.jdbc=https://@repo-spring-io@/org/springframework/cloud/stream/app/jdbc-source-pulsar/@apps.version@/jdbc-source-pulsar-@apps.version@.jar +source.jdbc.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/jdbc-source-pulsar/@apps.version@/jdbc-source-pulsar-@apps.version@-metadata.jar +source.jms=https://@repo-spring-io@/org/springframework/cloud/stream/app/jms-source-pulsar/@apps.version@/jms-source-pulsar-@apps.version@.jar +source.jms.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/jms-source-pulsar/@apps.version@/jms-source-pulsar-@apps.version@-metadata.jar +source.kafka=https://@repo-spring-io@/org/springframework/cloud/stream/app/kafka-source-pulsar/@apps.version@/kafka-source-pulsar-@apps.version@.jar +source.kafka.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/kafka-source-pulsar/@apps.version@/kafka-source-pulsar-@apps.version@-metadata.jar +source.load-generator=https://@repo-spring-io@/org/springframework/cloud/stream/app/load-generator-source-pulsar/@apps.version@/load-generator-source-pulsar-@apps.version@.jar +source.load-generator.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/load-generator-source-pulsar/@apps.version@/load-generator-source-pulsar-@apps.version@-metadata.jar +source.mail=https://@repo-spring-io@/org/springframework/cloud/stream/app/mail-source-pulsar/@apps.version@/mail-source-pulsar-@apps.version@.jar +source.mail.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/mail-source-pulsar/@apps.version@/mail-source-pulsar-@apps.version@-metadata.jar +source.mongodb=https://@repo-spring-io@/org/springframework/cloud/stream/app/mongodb-source-pulsar/@apps.version@/mongodb-source-pulsar-@apps.version@.jar +source.mongodb.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/mongodb-source-pulsar/@apps.version@/mongodb-source-pulsar-@apps.version@-metadata.jar +source.mqtt=https://@repo-spring-io@/org/springframework/cloud/stream/app/mqtt-source-pulsar/@apps.version@/mqtt-source-pulsar-@apps.version@.jar +source.mqtt.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/mqtt-source-pulsar/@apps.version@/mqtt-source-pulsar-@apps.version@-metadata.jar +source.rabbit=https://@repo-spring-io@/org/springframework/cloud/stream/app/rabbit-source-pulsar/@apps.version@/rabbit-source-pulsar-@apps.version@.jar +source.rabbit.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/rabbit-source-pulsar/@apps.version@/rabbit-source-pulsar-@apps.version@-metadata.jar +source.s3=https://@repo-spring-io@/org/springframework/cloud/stream/app/s3-source-pulsar/@apps.version@/s3-source-pulsar-@apps.version@.jar +source.s3.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/s3-source-pulsar/@apps.version@/s3-source-pulsar-@apps.version@-metadata.jar +source.sftp=https://@repo-spring-io@/org/springframework/cloud/stream/app/sftp-source-pulsar/@apps.version@/sftp-source-pulsar-@apps.version@.jar +source.sftp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/sftp-source-pulsar/@apps.version@/sftp-source-pulsar-@apps.version@-metadata.jar +source.syslog=https://@repo-spring-io@/org/springframework/cloud/stream/app/syslog-source-pulsar/@apps.version@/syslog-source-pulsar-@apps.version@.jar +source.syslog.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/syslog-source-pulsar/@apps.version@/syslog-source-pulsar-@apps.version@-metadata.jar +source.tcp=https://@repo-spring-io@/org/springframework/cloud/stream/app/tcp-source-pulsar/@apps.version@/tcp-source-pulsar-@apps.version@.jar +source.tcp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/tcp-source-pulsar/@apps.version@/tcp-source-pulsar-@apps.version@-metadata.jar +source.time=https://@repo-spring-io@/org/springframework/cloud/stream/app/time-source-pulsar/@apps.version@/time-source-pulsar-@apps.version@.jar +source.time.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/time-source-pulsar/@apps.version@/time-source-pulsar-@apps.version@-metadata.jar +source.twitter-message=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-message-source-pulsar/@apps.version@/twitter-message-source-pulsar-@apps.version@.jar +source.twitter-message.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-message-source-pulsar/@apps.version@/twitter-message-source-pulsar-@apps.version@-metadata.jar +source.twitter-search=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-search-source-pulsar/@apps.version@/twitter-search-source-pulsar-@apps.version@.jar +source.twitter-search.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-search-source-pulsar/@apps.version@/twitter-search-source-pulsar-@apps.version@-metadata.jar +source.twitter-stream=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-stream-source-pulsar/@apps.version@/twitter-stream-source-pulsar-@apps.version@.jar +source.twitter-stream.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-stream-source-pulsar/@apps.version@/twitter-stream-source-pulsar-@apps.version@-metadata.jar +source.websocket=https://@repo-spring-io@/org/springframework/cloud/stream/app/websocket-source-pulsar/@apps.version@/websocket-source-pulsar-@apps.version@.jar +source.websocket.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/websocket-source-pulsar/@apps.version@/websocket-source-pulsar-@apps.version@-metadata.jar +source.xmpp=https://@repo-spring-io@/org/springframework/cloud/stream/app/xmpp-source-pulsar/@apps.version@/zeromq-source-pulsar-@apps.version@.jar +source.xmpp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/xmpp-source-pulsar/@apps.version@/zeromq-source-pulsar-@apps.version@-metadata.jar +source.zeromq=https://@repo-spring-io@/org/springframework/cloud/stream/app/zeromq-source-pulsar/@apps.version@/zeromq-source-pulsar-@apps.version@.jar +source.zeromq.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/zeromq-source-pulsar/@apps.version@/zeromq-source-pulsar-@apps.version@-metadata.jar +sink.cassandra=https://@repo-spring-io@/org/springframework/cloud/stream/app/cassandra-sink-pulsar/@apps.version@/cassandra-sink-pulsar-@apps.version@.jar +sink.cassandra.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/cassandra-sink-pulsar/@apps.version@/cassandra-sink-pulsar-@apps.version@-metadata.jar +sink.analytics=https://@repo-spring-io@/org/springframework/cloud/stream/app/analytics-sink-pulsar/@apps.version@/analytics-sink-pulsar-@apps.version@.jar +sink.analytics.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/analytics-sink-pulsar/@apps.version@/analytics-sink-pulsar-@apps.version@-metadata.jar +sink.elasticsearch=https://@repo-spring-io@/org/springframework/cloud/stream/app/elasticsearch-sink-pulsar/@apps.version@/elasticsearch-sink-pulsar-@apps.version@.jar +sink.elasticsearch.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/elasticsearch-sink-pulsar/@apps.version@/elasticsearch-sink-pulsar-@apps.version@-metadata.jar +sink.wavefront=https://@repo-spring-io@/org/springframework/cloud/stream/app/wavefront-sink-pulsar/@apps.version@/wavefront-sink-pulsar-@apps.version@.jar +sink.wavefront.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/wavefront-sink-pulsar/@apps.version@/wavefront-sink-pulsar-@apps.version@-metadata.jar +sink.file=https://@repo-spring-io@/org/springframework/cloud/stream/app/file-sink-pulsar/@apps.version@/file-sink-pulsar-@apps.version@.jar +sink.file.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/file-sink-pulsar/@apps.version@/file-sink-pulsar-@apps.version@-metadata.jar +sink.ftp=https://@repo-spring-io@/org/springframework/cloud/stream/app/ftp-sink-pulsar/@apps.version@/ftp-sink-pulsar-@apps.version@.jar +sink.ftp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/ftp-sink-pulsar/@apps.version@/ftp-sink-pulsar-@apps.version@-metadata.jar +sink.jdbc=https://@repo-spring-io@/org/springframework/cloud/stream/app/jdbc-sink-pulsar/@apps.version@/jdbc-sink-pulsar-@apps.version@.jar +sink.jdbc.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/jdbc-sink-pulsar/@apps.version@/jdbc-sink-pulsar-@apps.version@-metadata.jar +sink.kafka=https://@repo-spring-io@/org/springframework/cloud/stream/app/kafka-sink-pulsar/@apps.version@/kafka-sink-pulsar-@apps.version@.jar +sink.kafka.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/kafka-sink-pulsar/@apps.version@/kafka-sink-pulsar-@apps.version@-metadata.jar +sink.log=https://@repo-spring-io@/org/springframework/cloud/stream/app/log-sink-pulsar/@apps.version@/log-sink-pulsar-@apps.version@.jar +sink.log.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/log-sink-pulsar/@apps.version@/log-sink-pulsar-@apps.version@-metadata.jar +sink.mongodb=https://@repo-spring-io@/org/springframework/cloud/stream/app/mongodb-sink-pulsar/@apps.version@/mongodb-sink-pulsar-@apps.version@.jar +sink.mongodb.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/mongodb-sink-pulsar/@apps.version@/mongodb-sink-pulsar-@apps.version@-metadata.jar +sink.mqtt=https://@repo-spring-io@/org/springframework/cloud/stream/app/mqtt-sink-pulsar/@apps.version@/mqtt-sink-pulsar-@apps.version@.jar +sink.mqtt.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/mqtt-sink-pulsar/@apps.version@/mqtt-sink-pulsar-@apps.version@-metadata.jar +sink.pgcopy=https://@repo-spring-io@/org/springframework/cloud/stream/app/pgcopy-sink-pulsar/@apps.version@/pgcopy-sink-pulsar-@apps.version@.jar +sink.pgcopy.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/pgcopy-sink-pulsar/@apps.version@/pgcopy-sink-pulsar-@apps.version@-metadata.jar +sink.rabbit=https://@repo-spring-io@/org/springframework/cloud/stream/app/rabbit-sink-pulsar/@apps.version@/rabbit-sink-pulsar-@apps.version@.jar +sink.rabbit.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/rabbit-sink-pulsar/@apps.version@/rabbit-sink-pulsar-@apps.version@-metadata.jar +sink.redis=https://@repo-spring-io@/org/springframework/cloud/stream/app/redis-sink-pulsar/@apps.version@/redis-sink-pulsar-@apps.version@.jar +sink.redis.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/redis-sink-pulsar/@apps.version@/redis-sink-pulsar-@apps.version@-metadata.jar +sink.router=https://@repo-spring-io@/org/springframework/cloud/stream/app/router-sink-pulsar/@apps.version@/router-sink-pulsar-@apps.version@.jar +sink.router.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/router-sink-pulsar/@apps.version@/router-sink-pulsar-@apps.version@-metadata.jar +sink.rsocket=https://@repo-spring-io@/org/springframework/cloud/stream/app/rsocket-sink-pulsar/@apps.version@/rsocket-sink-pulsar-@apps.version@.jar +sink.rsocket.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/rsocket-sink-pulsar/@apps.version@/rsocket-sink-pulsar-@apps.version@-metadata.jar +sink.s3=https://@repo-spring-io@/org/springframework/cloud/stream/app/s3-sink-pulsar/@apps.version@/s3-sink-pulsar-@apps.version@.jar +sink.s3.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/s3-sink-pulsar/@apps.version@/s3-sink-pulsar-@apps.version@-metadata.jar +sink.sftp=https://@repo-spring-io@/org/springframework/cloud/stream/app/sftp-sink-pulsar/@apps.version@/sftp-sink-pulsar-@apps.version@.jar +sink.sftp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/sftp-sink-pulsar/@apps.version@/sftp-sink-pulsar-@apps.version@-metadata.jar +sink.tcp=https://@repo-spring-io@/org/springframework/cloud/stream/app/tcp-sink-pulsar/@apps.version@/tcp-sink-pulsar-@apps.version@.jar +sink.tcp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/tcp-sink-pulsar/@apps.version@/tcp-sink-pulsar-@apps.version@-metadata.jar +sink.throughput=https://@repo-spring-io@/org/springframework/cloud/stream/app/throughput-sink-pulsar/@apps.version@/throughput-sink-pulsar-@apps.version@.jar +sink.throughput.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/throughput-sink-pulsar/@apps.version@/throughput-sink-pulsar-@apps.version@-metadata.jar +sink.twitter-message=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-message-sink-pulsar/@apps.version@/twitter-message-sink-pulsar-@apps.version@.jar +sink.twitter-message.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-message-sink-pulsar/@apps.version@/twitter-message-sink-pulsar-@apps.version@-metadata.jar +sink.twitter-update=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-update-sink-pulsar/@apps.version@/twitter-update-sink-pulsar-@apps.version@.jar +sink.twitter-update.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-update-sink-pulsar/@apps.version@/twitter-update-sink-pulsar-@apps.version@-metadata.jar +sink.websocket=https://@repo-spring-io@/org/springframework/cloud/stream/app/websocket-sink-pulsar/@apps.version@/websocket-sink-pulsar-@apps.version@.jar +sink.websocket.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/websocket-sink-pulsar/@apps.version@/websocket-sink-pulsar-@apps.version@-metadata.jar +sink.xmpp=https://@repo-spring-io@/org/springframework/cloud/stream/app/xmpp-sink-pulsar/@apps.version@/zeromq-sink-pulsar-@apps.version@.jar +sink.xmpp.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/xmpp-sink-pulsar/@apps.version@/zeromq-sink-pulsar-@apps.version@-metadata.jar +sink.zeromq=https://@repo-spring-io@/org/springframework/cloud/stream/app/zeromq-sink-pulsar/@apps.version@/zeromq-sink-pulsar-@apps.version@.jar +sink.zeromq.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/zeromq-sink-pulsar/@apps.version@/zeromq-sink-pulsar-@apps.version@-metadata.jar +processor.aggregator=https://@repo-spring-io@/org/springframework/cloud/stream/app/aggregator-processor-pulsar/@apps.version@/aggregator-processor-pulsar-@apps.version@.jar +processor.aggregator.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/aggregator-processor-pulsar/@apps.version@/aggregator-processor-pulsar-@apps.version@-metadata.jar +processor.bridge=https://@repo-spring-io@/org/springframework/cloud/stream/app/bridge-processor-pulsar/@apps.version@/bridge-processor-pulsar-@apps.version@.jar +processor.bridge.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/bridge-processor-pulsar/@apps.version@/bridge-processor-pulsar-@apps.version@-metadata.jar +processor.filter=https://@repo-spring-io@/org/springframework/cloud/stream/app/filter-processor-pulsar/@apps.version@/filter-processor-pulsar-@apps.version@.jar +processor.filter.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/filter-processor-pulsar/@apps.version@/filter-processor-pulsar-@apps.version@-metadata.jar +processor.groovy=https://@repo-spring-io@/org/springframework/cloud/stream/app/groovy-processor-pulsar/@apps.version@/groovy-processor-pulsar-@apps.version@.jar +processor.groovy.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/groovy-processor-pulsar/@apps.version@/groovy-processor-pulsar-@apps.version@-metadata.jar +processor.header-enricher=https://@repo-spring-io@/org/springframework/cloud/stream/app/header-enricher-processor-pulsar/@apps.version@/header-enricher-processor-pulsar-@apps.version@.jar +processor.header-enricher.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/header-enricher-processor-pulsar/@apps.version@/header-enricher-processor-pulsar-@apps.version@-metadata.jar +processor.http-request=https://@repo-spring-io@/org/springframework/cloud/stream/app/http-request-processor-pulsar/@apps.version@/http-request-processor-pulsar-@apps.version@.jar +processor.http-request.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/http-request-processor-pulsar/@apps.version@/http-request-processor-pulsar-@apps.version@-metadata.jar +processor.image-recognition=https://@repo-spring-io@/org/springframework/cloud/stream/app/image-recognition-processor-pulsar/@apps.version@/image-recognition-processor-pulsar-@apps.version@.jar +processor.image-recognition.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/image-recognition-processor-pulsar/@apps.version@/image-recognition-processor-pulsar-@apps.version@-metadata.jar +processor.object-detection=https://@repo-spring-io@/org/springframework/cloud/stream/app/object-detection-processor-pulsar/@apps.version@/object-detection-processor-pulsar-@apps.version@.jar +processor.object-detection.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/object-detection-processor-pulsar/@apps.version@/object-detection-processor-pulsar-@apps.version@-metadata.jar +processor.semantic-segmentation=https://@repo-spring-io@/org/springframework/cloud/stream/app/semantic-segmentation-processor-pulsar/@apps.version@/semantic-segmentation-processor-pulsar-@apps.version@.jar +processor.semantic-segmentation.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/semantic-segmentation-processor-pulsar/@apps.version@/semantic-segmentation-processor-pulsar-@apps.version@-metadata.jar +processor.script=https://@repo-spring-io@/org/springframework/cloud/stream/app/script-processor-pulsar/@apps.version@/script-processor-pulsar-@apps.version@.jar +processor.script.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/script-processor-pulsar/@apps.version@/script-processor-pulsar-@apps.version@-metadata.jar +processor.splitter=https://@repo-spring-io@/org/springframework/cloud/stream/app/splitter-processor-pulsar/@apps.version@/splitter-processor-pulsar-@apps.version@.jar +processor.splitter.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/splitter-processor-pulsar/@apps.version@/splitter-processor-pulsar-@apps.version@-metadata.jar +processor.transform=https://@repo-spring-io@/org/springframework/cloud/stream/app/transform-processor-pulsar/@apps.version@/transform-processor-pulsar-@apps.version@.jar +processor.transform.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/transform-processor-pulsar/@apps.version@/transform-processor-pulsar-@apps.version@-metadata.jar +processor.twitter-trend=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-trend-processor-pulsar/@apps.version@/twitter-trend-processor-pulsar-@apps.version@.jar +processor.twitter-trend.metadata=https://@repo-spring-io@/org/springframework/cloud/stream/app/twitter-trend-processor-pulsar/@apps.version@/twitter-trend-processor-pulsar-@apps.version@-metadata.jar diff --git a/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-maven.properties b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-maven.properties new file mode 100644 index 000000000..272a823da --- /dev/null +++ b/stream-applications-release-train/stream-applications-descriptor/src/main/resources/META-INF/pulsar-apps-maven.properties @@ -0,0 +1,122 @@ +source.debezium=maven://org.springframework.cloud.stream.app:debezium-source-pulsar:@apps.version@ +source.debezium.metadata=maven://org.springframework.cloud.stream.app:debezium-source-pulsar:jar:metadata:@apps.version@ +source.file=maven://org.springframework.cloud.stream.app:file-source-pulsar:@apps.version@ +source.file.metadata=maven://org.springframework.cloud.stream.app:file-source-pulsar:jar:metadata:@apps.version@ +source.ftp=maven://org.springframework.cloud.stream.app:ftp-source-pulsar:@apps.version@ +source.ftp.metadata=maven://org.springframework.cloud.stream.app:ftp-source-pulsar:jar:metadata:@apps.version@ +source.http=maven://org.springframework.cloud.stream.app:http-source-pulsar:@apps.version@ +source.http.metadata=maven://org.springframework.cloud.stream.app:http-source-pulsar:jar:metadata:@apps.version@ +source.jdbc=maven://org.springframework.cloud.stream.app:jdbc-source-pulsar:@apps.version@ +source.jdbc.metadata=maven://org.springframework.cloud.stream.app:jdbc-source-pulsar:jar:metadata:@apps.version@ +source.jms=maven://org.springframework.cloud.stream.app:jms-source-pulsar:@apps.version@ +source.jms.metadata=maven://org.springframework.cloud.stream.app:jms-source-pulsar:jar:metadata:@apps.version@ +source.kafka=maven://org.springframework.cloud.stream.app:kafka-source-pulsar:@apps.version@ +source.kafka.metadata=maven://org.springframework.cloud.stream.app:kafka-source-pulsar:jar:metadata:@apps.version@ +source.load-generator=maven://org.springframework.cloud.stream.app:load-generator-source-pulsar:@apps.version@ +source.load-generator.metadata=maven://org.springframework.cloud.stream.app:load-generator-source-pulsar:jar:metadata:@apps.version@ +source.mail=maven://org.springframework.cloud.stream.app:mail-source-pulsar:@apps.version@ +source.mail.metadata=maven://org.springframework.cloud.stream.app:mail-source-pulsar:jar:metadata:@apps.version@ +source.mongodb=maven://org.springframework.cloud.stream.app:mongodb-source-pulsar:@apps.version@ +source.mongodb.metadata=maven://org.springframework.cloud.stream.app:mongodb-source-pulsar:jar:metadata:@apps.version@ +source.mqtt=maven://org.springframework.cloud.stream.app:mqtt-source-pulsar:@apps.version@ +source.mqtt.metadata=maven://org.springframework.cloud.stream.app:mqtt-source-pulsar:jar:metadata:@apps.version@ +source.rabbit=maven://org.springframework.cloud.stream.app:rabbit-source-pulsar:@apps.version@ +source.rabbit.metadata=maven://org.springframework.cloud.stream.app:rabbit-source-pulsar:jar:metadata:@apps.version@ +source.s3=maven://org.springframework.cloud.stream.app:s3-source-pulsar:@apps.version@ +source.s3.metadata=maven://org.springframework.cloud.stream.app:s3-source-pulsar:jar:metadata:@apps.version@ +source.sftp=maven://org.springframework.cloud.stream.app:sftp-source-pulsar:@apps.version@ +source.sftp.metadata=maven://org.springframework.cloud.stream.app:sftp-source-pulsar:jar:metadata:@apps.version@ +source.syslog=maven://org.springframework.cloud.stream.app:syslog-source-pulsar:@apps.version@ +source.syslog.metadata=maven://org.springframework.cloud.stream.app:syslog-source-pulsar:jar:metadata:@apps.version@ +source.tcp=maven://org.springframework.cloud.stream.app:tcp-source-pulsar:@apps.version@ +source.tcp.metadata=maven://org.springframework.cloud.stream.app:tcp-source-pulsar:jar:metadata:@apps.version@ +source.time=maven://org.springframework.cloud.stream.app:time-source-pulsar:@apps.version@ +source.time.metadata=maven://org.springframework.cloud.stream.app:time-source-pulsar:jar:metadata:@apps.version@ +source.twitter-message=maven://org.springframework.cloud.stream.app:twitter-message-source-pulsar:@apps.version@ +source.twitter-message.metadata=maven://org.springframework.cloud.stream.app:twitter-message-source-pulsar:jar:metadata:@apps.version@ +source.twitter-search=maven://org.springframework.cloud.stream.app:twitter-search-source-pulsar:@apps.version@ +source.twitter-search.metadata=maven://org.springframework.cloud.stream.app:twitter-search-source-pulsar:jar:metadata:@apps.version@ +source.twitter-stream=maven://org.springframework.cloud.stream.app:twitter-stream-source-pulsar:@apps.version@ +source.twitter-stream.metadata=maven://org.springframework.cloud.stream.app:twitter-stream-source-pulsar:jar:metadata:@apps.version@ +source.websocket=maven://org.springframework.cloud.stream.app:websocket-source-pulsar:@apps.version@ +source.websocket.metadata=maven://org.springframework.cloud.stream.app:websocket-source-pulsar:jar:metadata:@apps.version@ +source.xmpp=maven://org.springframework.cloud.stream.app:xmpp-source-pulsar:@apps.version@ +source.xmpp.metadata=maven://org.springframework.cloud.stream.app:xmpp-source-pulsar:jar:metadata:@apps.version@ +source.zeromq=maven://org.springframework.cloud.stream.app:zeromq-source-pulsar:@apps.version@ +source.zeromq.metadata=maven://org.springframework.cloud.stream.app:zeromq-source-pulsar:jar:metadata:@apps.version@ +sink.cassandra=maven://org.springframework.cloud.stream.app:cassandra-sink-pulsar:@apps.version@ +sink.cassandra.metadata=maven://org.springframework.cloud.stream.app:cassandra-sink-pulsar:jar:metadata:@apps.version@ +sink.analytics=maven://org.springframework.cloud.stream.app:analytics-sink-pulsar:@apps.version@ +sink.analytics.metadata=maven://org.springframework.cloud.stream.app:analytics-sink-pulsar:jar:metadata:@apps.version@ +sink.elasticsearch=maven://org.springframework.cloud.stream.app:elasticsearch-sink-pulsar:@apps.version@ +sink.elasticsearch.metadata=maven://org.springframework.cloud.stream.app:elasticsearch-sink-pulsar:jar:metadata:@apps.version@ +sink.wavefront=maven://org.springframework.cloud.stream.app:wavefront-sink-pulsar:@apps.version@ +sink.wavefront.metadata=maven://org.springframework.cloud.stream.app:wavefront-sink-pulsar:jar:metadata:@apps.version@ +sink.file=maven://org.springframework.cloud.stream.app:file-sink-pulsar:@apps.version@ +sink.file.metadata=maven://org.springframework.cloud.stream.app:file-sink-pulsar:jar:metadata:@apps.version@ +sink.ftp=maven://org.springframework.cloud.stream.app:ftp-sink-pulsar:@apps.version@ +sink.ftp.metadata=maven://org.springframework.cloud.stream.app:ftp-sink-pulsar:jar:metadata:@apps.version@ +sink.jdbc=maven://org.springframework.cloud.stream.app:jdbc-sink-pulsar:@apps.version@ +sink.jdbc.metadata=maven://org.springframework.cloud.stream.app:jdbc-sink-pulsar:jar:metadata:@apps.version@ +sink.kafka=maven://org.springframework.cloud.stream.app:kafka-sink-pulsar:@apps.version@ +sink.kafka.metadata=maven://org.springframework.cloud.stream.app:kafka-sink-pulsar:jar:metadata:@apps.version@ +sink.log=maven://org.springframework.cloud.stream.app:log-sink-pulsar:@apps.version@ +sink.log.metadata=maven://org.springframework.cloud.stream.app:log-sink-pulsar:jar:metadata:@apps.version@ +sink.mongodb=maven://org.springframework.cloud.stream.app:mongodb-sink-pulsar:@apps.version@ +sink.mongodb.metadata=maven://org.springframework.cloud.stream.app:mongodb-sink-pulsar:jar:metadata:@apps.version@ +sink.mqtt=maven://org.springframework.cloud.stream.app:mqtt-sink-pulsar:@apps.version@ +sink.mqtt.metadata=maven://org.springframework.cloud.stream.app:mqtt-sink-pulsar:jar:metadata:@apps.version@ +sink.pgcopy=maven://org.springframework.cloud.stream.app:pgcopy-sink-pulsar:@apps.version@ +sink.pgcopy.metadata=maven://org.springframework.cloud.stream.app:pgcopy-sink-pulsar:jar:metadata:@apps.version@ +sink.rabbit=maven://org.springframework.cloud.stream.app:rabbit-sink-pulsar:@apps.version@ +sink.rabbit.metadata=maven://org.springframework.cloud.stream.app:rabbit-sink-pulsar:jar:metadata:@apps.version@ +sink.redis=maven://org.springframework.cloud.stream.app:redis-sink-pulsar:@apps.version@ +sink.redis.metadata=maven://org.springframework.cloud.stream.app:redis-sink-pulsar:jar:metadata:@apps.version@ +sink.router=maven://org.springframework.cloud.stream.app:router-sink-pulsar:@apps.version@ +sink.router.metadata=maven://org.springframework.cloud.stream.app:router-sink-pulsar:jar:metadata:@apps.version@ +sink.rsocket=maven://org.springframework.cloud.stream.app:rsocket-sink-pulsar:@apps.version@ +sink.rsocket.metadata=maven://org.springframework.cloud.stream.app:rsocket-sink-pulsar:jar:metadata:@apps.version@ +sink.s3=maven://org.springframework.cloud.stream.app:s3-sink-pulsar:@apps.version@ +sink.s3.metadata=maven://org.springframework.cloud.stream.app:s3-sink-pulsar:jar:metadata:@apps.version@ +sink.sftp=maven://org.springframework.cloud.stream.app:sftp-sink-pulsar:@apps.version@ +sink.sftp.metadata=maven://org.springframework.cloud.stream.app:sftp-sink-pulsar:jar:metadata:@apps.version@ +sink.tcp=maven://org.springframework.cloud.stream.app:tcp-sink-pulsar:@apps.version@ +sink.tcp.metadata=maven://org.springframework.cloud.stream.app:tcp-sink-pulsar:jar:metadata:@apps.version@ +sink.throughput=maven://org.springframework.cloud.stream.app:throughput-sink-pulsar:@apps.version@ +sink.throughput.metadata=maven://org.springframework.cloud.stream.app:throughput-sink-pulsar:jar:metadata:@apps.version@ +sink.twitter-message=maven://org.springframework.cloud.stream.app:twitter-message-sink-pulsar:@apps.version@ +sink.twitter-message.metadata=maven://org.springframework.cloud.stream.app:twitter-message-sink-pulsar:jar:metadata:@apps.version@ +sink.twitter-update=maven://org.springframework.cloud.stream.app:twitter-update-sink-pulsar:@apps.version@ +sink.twitter-update.metadata=maven://org.springframework.cloud.stream.app:twitter-update-sink-pulsar:jar:metadata:@apps.version@ +sink.websocket=maven://org.springframework.cloud.stream.app:websocket-sink-pulsar:@apps.version@ +sink.websocket.metadata=maven://org.springframework.cloud.stream.app:websocket-sink-pulsar:jar:metadata:@apps.version@ +sink.xmpp=maven://org.springframework.cloud.stream.app:xmpp-sink-pulsar:@apps.version@ +sink.xmpp.metadata=maven://org.springframework.cloud.stream.app:xmpp-sink-pulsar:jar:metadata:@apps.version@ +sink.zeromq=maven://org.springframework.cloud.stream.app:zeromq-sink-pulsar:@apps.version@ +sink.zeromq.metadata=maven://org.springframework.cloud.stream.app:zeromq-sink-pulsar:jar:metadata:@apps.version@ +processor.aggregator=maven://org.springframework.cloud.stream.app:aggregator-processor-pulsar:@apps.version@ +processor.aggregator.metadata=maven://org.springframework.cloud.stream.app:aggregator-processor-pulsar:jar:metadata:@apps.version@ +processor.bridge=maven://org.springframework.cloud.stream.app:bridge-processor-pulsar:@apps.version@ +processor.bridge.metadata=maven://org.springframework.cloud.stream.app:bridge-processor-pulsar:jar:metadata:@apps.version@ +processor.filter=maven://org.springframework.cloud.stream.app:filter-processor-pulsar:@apps.version@ +processor.filter.metadata=maven://org.springframework.cloud.stream.app:filter-processor-pulsar:jar:metadata:@apps.version@ +processor.groovy=maven://org.springframework.cloud.stream.app:groovy-processor-pulsar:@apps.version@ +processor.groovy.metadata=maven://org.springframework.cloud.stream.app:groovy-processor-pulsar:jar:metadata:@apps.version@ +processor.header-enricher=maven://org.springframework.cloud.stream.app:header-enricher-processor-pulsar:@apps.version@ +processor.header-enricher.metadata=maven://org.springframework.cloud.stream.app:header-enricher-processor-pulsar:jar:metadata:@apps.version@ +processor.http-request=maven://org.springframework.cloud.stream.app:http-request-processor-pulsar:@apps.version@ +processor.http-request.metadata=maven://org.springframework.cloud.stream.app:http-request-processor-pulsar:jar:metadata:@apps.version@ +processor.image-recognition=maven://org.springframework.cloud.stream.app:image-recognition-processor-pulsar:@apps.version@ +processor.image-recognition.metadata=maven://org.springframework.cloud.stream.app:image-recognition-processor-pulsar:jar:metadata:@apps.version@ +processor.object-detection=maven://org.springframework.cloud.stream.app:object-detection-processor-pulsar:@apps.version@ +processor.object-detection.metadata=maven://org.springframework.cloud.stream.app:object-detection-processor-pulsar:jar:metadata:@apps.version@ +processor.semantic-segmentation=maven://org.springframework.cloud.stream.app:semantic-segmentation-processor-pulsar:@apps.version@ +processor.semantic-segmentation.metadata=maven://org.springframework.cloud.stream.app:semantic-segmentation-processor-pulsar:jar:metadata:@apps.version@ +processor.script=maven://org.springframework.cloud.stream.app:script-processor-pulsar:@apps.version@ +processor.script.metadata=maven://org.springframework.cloud.stream.app:script-processor-pulsar:jar:metadata:@apps.version@ +processor.splitter=maven://org.springframework.cloud.stream.app:splitter-processor-pulsar:@apps.version@ +processor.splitter.metadata=maven://org.springframework.cloud.stream.app:splitter-processor-pulsar:jar:metadata:@apps.version@ +processor.transform=maven://org.springframework.cloud.stream.app:transform-processor-pulsar:@apps.version@ +processor.transform.metadata=maven://org.springframework.cloud.stream.app:transform-processor-pulsar:jar:metadata:@apps.version@ +processor.twitter-trend=maven://org.springframework.cloud.stream.app:twitter-trend-processor-pulsar:@apps.version@ +processor.twitter-trend.metadata=maven://org.springframework.cloud.stream.app:twitter-trend-processor-pulsar:jar:metadata:@apps.version@