This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.18.x by this push:
     new 76eb9d80dac camel-jbang - Known all Camel component as dependencies 
via their FQN
76eb9d80dac is described below

commit 76eb9d80dac0155ef7191c1270c0656ed3735d9b
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jul 29 12:12:02 2022 +0200

    camel-jbang - Known all Camel component as dependencies via their FQN
---
 dsl/camel-kamelet-main/pom.xml                     |  17 +
 .../camel-component-known-dependencies.properties  | 350 +++++++++++++++++++++
 .../main/download/KnownDependenciesResolver.java   |   7 +-
 .../maven/packaging/PrepareKameletMainMojo.java    | 184 +++++++++++
 4 files changed, 557 insertions(+), 1 deletion(-)

diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml
index f9f3991a8eb..c05353d925d 100644
--- a/dsl/camel-kamelet-main/pom.xml
+++ b/dsl/camel-kamelet-main/pom.xml
@@ -157,4 +157,21 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.camel</groupId>
+                <artifactId>camel-package-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>prepare-kamelet-main</goal>
+                        </goals>
+                        <phase>generate-resources</phase>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git 
a/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties
 
b/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties
new file mode 100644
index 00000000000..ab555fe1374
--- /dev/null
+++ 
b/dsl/camel-kamelet-main/src/generated/resources/camel-component-known-dependencies.properties
@@ -0,0 +1,350 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements.  See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You 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
+##
+##      http://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.
+## ---------------------------------------------------------------------------
+
+org.apache.camel.FunctionGraphComponent=camel:huaweicloud-functiongraph
+org.apache.camel.coap.CoAPComponent=camel:coap
+org.apache.camel.component.activemq.ActiveMQComponent=camel:activemq
+org.apache.camel.component.ahc.AhcComponent=camel:ahc
+org.apache.camel.component.ahc.ws.WsComponent=camel:ahc-ws
+org.apache.camel.component.amqp.AMQPComponent=camel:amqp
+org.apache.camel.component.arangodb.ArangoDbComponent=camel:arangodb
+org.apache.camel.component.aries.HyperledgerAriesComponent=camel:hyperledger-aries
+org.apache.camel.component.as2.AS2Component=camel:as2
+org.apache.camel.component.asterisk.AsteriskComponent=camel:asterisk
+org.apache.camel.component.atlasmap.AtlasMapComponent=camel:atlasmap
+org.apache.camel.component.atmos.AtmosComponent=camel:atmos
+org.apache.camel.component.atmosphere.websocket.WebsocketComponent=camel:atmosphere-websocket
+org.apache.camel.component.atom.AtomComponent=camel:atom
+org.apache.camel.component.avro.AvroComponent=camel:avro-rpc
+org.apache.camel.component.aws.secretsmanager.SecretsManagerComponent=camel:aws-secrets-manager
+org.apache.camel.component.aws2.athena.Athena2Component=camel:aws2-athena
+org.apache.camel.component.aws2.cw.Cw2Component=camel:aws2-cw
+org.apache.camel.component.aws2.ddb.Ddb2Component=camel:aws2-ddb
+org.apache.camel.component.aws2.ddbstream.Ddb2StreamComponent=camel:aws2-ddb
+org.apache.camel.component.aws2.ec2.AWS2EC2Component=camel:aws2-ec2
+org.apache.camel.component.aws2.ecs.ECS2Component=camel:aws2-ecs
+org.apache.camel.component.aws2.eks.EKS2Component=camel:aws2-eks
+org.apache.camel.component.aws2.eventbridge.EventbridgeComponent=camel:aws2-eventbridge
+org.apache.camel.component.aws2.firehose.KinesisFirehose2Component=camel:aws2-kinesis
+org.apache.camel.component.aws2.iam.IAM2Component=camel:aws2-iam
+org.apache.camel.component.aws2.kinesis.Kinesis2Component=camel:aws2-kinesis
+org.apache.camel.component.aws2.kms.KMS2Component=camel:aws2-kms
+org.apache.camel.component.aws2.lambda.Lambda2Component=camel:aws2-lambda
+org.apache.camel.component.aws2.mq.MQ2Component=camel:aws2-mq
+org.apache.camel.component.aws2.msk.MSK2Component=camel:aws2-msk
+org.apache.camel.component.aws2.s3.AWS2S3Component=camel:aws2-s3
+org.apache.camel.component.aws2.ses.Ses2Component=camel:aws2-ses
+org.apache.camel.component.aws2.sns.Sns2Component=camel:aws2-sns
+org.apache.camel.component.aws2.sqs.Sqs2Component=camel:aws2-sqs
+org.apache.camel.component.aws2.sts.STS2Component=camel:aws2-sts
+org.apache.camel.component.aws2.translate.Translate2Component=camel:aws2-translate
+org.apache.camel.component.azure.cosmosdb.CosmosDbComponent=camel:azure-cosmosdb
+org.apache.camel.component.azure.eventhubs.EventHubsComponent=camel:azure-eventhubs
+org.apache.camel.component.azure.key.vault.KeyVaultComponent=camel:azure-key-vault
+org.apache.camel.component.azure.servicebus.ServiceBusComponent=camel:azure-servicebus
+org.apache.camel.component.azure.storage.blob.BlobComponent=camel:azure-storage-blob
+org.apache.camel.component.azure.storage.datalake.DataLakeComponent=camel:azure-storage-datalake
+org.apache.camel.component.azure.storage.queue.QueueComponent=camel:azure-storage-queue
+org.apache.camel.component.bean.BeanComponent=camel:bean
+org.apache.camel.component.bean.validator.BeanValidatorComponent=camel:bean-validator
+org.apache.camel.component.beanclass.ClassComponent=camel:bean
+org.apache.camel.component.bonita.BonitaComponent=camel:bonita
+org.apache.camel.component.box.BoxComponent=camel:box
+org.apache.camel.component.braintree.BraintreeComponent=camel:braintree
+org.apache.camel.component.browse.BrowseComponent=camel:browse
+org.apache.camel.component.caffeine.cache.CaffeineCacheComponent=camel:caffeine
+org.apache.camel.component.caffeine.load.CaffeineLoadCacheComponent=camel:caffeine
+org.apache.camel.component.cassandra.CassandraComponent=camel:cassandraql
+org.apache.camel.component.chatscript.ChatScriptComponent=camel:chatscript
+org.apache.camel.component.chunk.ChunkComponent=camel:chunk
+org.apache.camel.component.cm.CMComponent=camel:cm-sms
+org.apache.camel.component.cmis.CMISComponent=camel:cmis
+org.apache.camel.component.cometd.CometdComponent=camel:cometd
+org.apache.camel.component.consul.ConsulComponent=camel:consul
+org.apache.camel.component.controlbus.ControlBusComponent=camel:controlbus
+org.apache.camel.component.corda.CordaComponent=camel:corda
+org.apache.camel.component.couchbase.CouchbaseComponent=camel:couchbase
+org.apache.camel.component.couchdb.CouchDbComponent=camel:couchdb
+org.apache.camel.component.cron.CronComponent=camel:cron
+org.apache.camel.component.crypto.DigitalSignatureComponent=camel:crypto
+org.apache.camel.component.cxf.jaxrs.CxfRsComponent=camel:cxf-rest
+org.apache.camel.component.cxf.jaxws.CxfComponent=camel:cxf-soap
+org.apache.camel.component.dataformat.DataFormatComponent=camel:dataformat
+org.apache.camel.component.dataset.DataSetComponent=camel:dataset
+org.apache.camel.component.dataset.DataSetTestComponent=camel:dataset
+org.apache.camel.component.debezium.DebeziumDb2Component=camel:debezium-db2
+org.apache.camel.component.debezium.DebeziumMongodbComponent=camel:debezium-mongodb
+org.apache.camel.component.debezium.DebeziumMySqlComponent=camel:debezium-mysql
+org.apache.camel.component.debezium.DebeziumOracleComponent=camel:debezium-oracle
+org.apache.camel.component.debezium.DebeziumPostgresComponent=camel:debezium-postgres
+org.apache.camel.component.debezium.DebeziumSqlserverComponent=camel:debezium-sqlserver
+org.apache.camel.component.digitalocean.DigitalOceanComponent=camel:digitalocean
+org.apache.camel.component.direct.DirectComponent=camel:direct
+org.apache.camel.component.directvm.DirectVmComponent=camel:directvm
+org.apache.camel.component.disruptor.DisruptorComponent=camel:disruptor
+org.apache.camel.component.disruptor.vm.DisruptorVmComponent=camel:disruptor
+org.apache.camel.component.djl.DJLComponent=camel:djl
+org.apache.camel.component.dns.DnsComponent=camel:dns
+org.apache.camel.component.docker.DockerComponent=camel:docker
+org.apache.camel.component.dozer.DozerComponent=camel:dozer
+org.apache.camel.component.drill.DrillComponent=camel:drill
+org.apache.camel.component.dropbox.DropboxComponent=camel:dropbox
+org.apache.camel.component.dynamicrouter.DynamicRouterComponent=camel:dynamic-router
+org.apache.camel.component.ehcache.EhcacheComponent=camel:ehcache
+org.apache.camel.component.elasticsearch.ElasticsearchComponent=camel:elasticsearch-rest
+org.apache.camel.component.event.EventComponent=camel:spring
+org.apache.camel.component.exec.ExecComponent=camel:exec
+org.apache.camel.component.facebook.FacebookComponent=camel:facebook
+org.apache.camel.component.fhir.FhirComponent=camel:fhir
+org.apache.camel.component.file.FileComponent=camel:file
+org.apache.camel.component.file.remote.FtpComponent=camel:ftp
+org.apache.camel.component.file.remote.FtpsComponent=camel:ftp
+org.apache.camel.component.file.remote.SftpComponent=camel:ftp
+org.apache.camel.component.file.watch.FileWatchComponent=camel:file-watch
+org.apache.camel.component.flatpack.FlatpackComponent=camel:flatpack
+org.apache.camel.component.flink.FlinkComponent=camel:flink
+org.apache.camel.component.fop.FopComponent=camel:fop
+org.apache.camel.component.freemarker.FreemarkerComponent=camel:freemarker
+org.apache.camel.component.geocoder.GeoCoderComponent=camel:geocoder
+org.apache.camel.component.git.GitComponent=camel:git
+org.apache.camel.component.github.GitHubComponent=camel:github
+org.apache.camel.component.google.bigquery.GoogleBigQueryComponent=camel:google-bigquery
+org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLComponent=camel:google-bigquery
+org.apache.camel.component.google.calendar.GoogleCalendarComponent=camel:google-calendar
+org.apache.camel.component.google.calendar.stream.GoogleCalendarStreamComponent=camel:google-calendar
+org.apache.camel.component.google.drive.GoogleDriveComponent=camel:google-drive
+org.apache.camel.component.google.functions.GoogleCloudFunctionsComponent=camel:google-functions
+org.apache.camel.component.google.mail.GoogleMailComponent=camel:google-mail
+org.apache.camel.component.google.mail.stream.GoogleMailStreamComponent=camel:google-mail
+org.apache.camel.component.google.pubsub.GooglePubsubComponent=camel:google-pubsub
+org.apache.camel.component.google.secret.manager.GoogleSecretManagerComponent=camel:google-secret-manager
+org.apache.camel.component.google.sheets.GoogleSheetsComponent=camel:google-sheets
+org.apache.camel.component.google.sheets.stream.GoogleSheetsStreamComponent=camel:google-sheets
+org.apache.camel.component.google.storage.GoogleCloudStorageComponent=camel:google-storage
+org.apache.camel.component.gora.GoraComponent=camel:gora
+org.apache.camel.component.grape.GrapeComponent=camel:grape
+org.apache.camel.component.graphql.GraphqlComponent=camel:graphql
+org.apache.camel.component.grpc.GrpcComponent=camel:grpc
+org.apache.camel.component.guava.eventbus.GuavaEventBusComponent=camel:guava-eventbus
+org.apache.camel.component.hashicorp.vault.HashicorpVaultComponent=camel:hashicorp-vault
+org.apache.camel.component.hazelcast.atomicnumber.HazelcastAtomicnumberComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.instance.HazelcastInstanceComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.list.HazelcastListComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.map.HazelcastMapComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.multimap.HazelcastMultimapComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.queue.HazelcastQueueComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.replicatedmap.HazelcastReplicatedmapComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.ringbuffer.HazelcastRingbufferComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.seda.HazelcastSedaComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.set.HazelcastSetComponent=camel:hazelcast
+org.apache.camel.component.hazelcast.topic.HazelcastTopicComponent=camel:hazelcast
+org.apache.camel.component.hbase.HBaseComponent=camel:hbase
+org.apache.camel.component.hdfs.HdfsComponent=camel:hdfs
+org.apache.camel.component.http.HttpComponent=camel:http
+org.apache.camel.component.huaweicloud.dms.DMSComponent=camel:huaweicloud-dms
+org.apache.camel.component.huaweicloud.frs.FaceRecognitionComponent=camel:huaweicloud-frs
+org.apache.camel.component.huaweicloud.iam.IAMComponent=camel:huaweicloud-iam
+org.apache.camel.component.huaweicloud.image.ImageRecognitionComponent=camel:huaweicloud-imagerecognition
+org.apache.camel.component.huaweicloud.obs.OBSComponent=camel:huaweicloud-obs
+org.apache.camel.component.huaweicloud.smn.SimpleNotificationComponent=camel:huaweicloud-smn
+org.apache.camel.component.iec60870.client.ClientComponent=camel:iec60870
+org.apache.camel.component.iec60870.server.ServerComponent=camel:iec60870
+org.apache.camel.component.ignite.cache.IgniteCacheComponent=camel:ignite
+org.apache.camel.component.ignite.compute.IgniteComputeComponent=camel:ignite
+org.apache.camel.component.ignite.events.IgniteEventsComponent=camel:ignite
+org.apache.camel.component.ignite.idgen.IgniteIdGenComponent=camel:ignite
+org.apache.camel.component.ignite.messaging.IgniteMessagingComponent=camel:ignite
+org.apache.camel.component.ignite.queue.IgniteQueueComponent=camel:ignite
+org.apache.camel.component.ignite.set.IgniteSetComponent=camel:ignite
+org.apache.camel.component.infinispan.embedded.InfinispanEmbeddedComponent=camel:infinispan-embedded
+org.apache.camel.component.infinispan.remote.InfinispanRemoteComponent=camel:infinispan
+org.apache.camel.component.influxdb.InfluxDbComponent=camel:influxdb
+org.apache.camel.component.iota.IOTAComponent=camel:iota
+org.apache.camel.component.ipfs.IPFSComponent=camel:ipfs
+org.apache.camel.component.irc.IrcComponent=camel:irc
+org.apache.camel.component.ironmq.IronMQComponent=camel:ironmq
+org.apache.camel.component.jbpm.JBPMComponent=camel:jbpm
+org.apache.camel.component.jcache.JCacheComponent=camel:jcache
+org.apache.camel.component.jclouds.JcloudsComponent=camel:jclouds
+org.apache.camel.component.jcr.JcrComponent=camel:jcr
+org.apache.camel.component.jdbc.JdbcComponent=camel:jdbc
+org.apache.camel.component.jetty9.JettyHttpComponent9=camel:jetty
+org.apache.camel.component.jgroups.JGroupsComponent=camel:jgroups
+org.apache.camel.component.jgroups.raft.JGroupsRaftComponent=camel:jgroups-raft
+org.apache.camel.component.jira.JiraComponent=camel:jira
+org.apache.camel.component.jms.JmsComponent=camel:jms
+org.apache.camel.component.jmx.JMXComponent=camel:jmx
+org.apache.camel.component.jolt.JoltComponent=camel:jolt
+org.apache.camel.component.jooq.JooqComponent=camel:jooq
+org.apache.camel.component.jpa.JpaComponent=camel:jpa
+org.apache.camel.component.jslt.JsltComponent=camel:jslt
+org.apache.camel.component.jsonata.JsonataComponent=camel:jsonata
+org.apache.camel.component.jsonpatch.JsonPatchComponent=camel:json-patch
+org.apache.camel.component.jsonvalidator.JsonValidatorComponent=camel:json-validator
+org.apache.camel.component.jt400.Jt400Component=camel:jt400
+org.apache.camel.component.kafka.KafkaComponent=camel:kafka
+org.apache.camel.component.kamelet.KameletComponent=camel:kamelet
+org.apache.camel.component.knative.KnativeComponent=camel:knative
+org.apache.camel.component.kubernetes.config_maps.KubernetesConfigMapsComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.customresources.KubernetesCustomResourcesComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.deployments.KubernetesDeploymentsComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.hpa.KubernetesHPAComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.job.KubernetesJobComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.namespaces.KubernetesNamespacesComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.nodes.KubernetesNodesComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.persistent_volumes.KubernetesPersistentVolumesComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.persistent_volumes_claims.KubernetesPersistentVolumesClaimsComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.pods.KubernetesPodsComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.replication_controllers.KubernetesReplicationControllersComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.resources_quota.KubernetesResourcesQuotaComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.secrets.KubernetesSecretsComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.service_accounts.KubernetesServiceAccountsComponent=camel:kubernetes
+org.apache.camel.component.kubernetes.services.KubernetesServicesComponent=camel:kubernetes
+org.apache.camel.component.kudu.KuduComponent=camel:kudu
+org.apache.camel.component.language.LanguageComponent=camel:language
+org.apache.camel.component.ldap.LdapComponent=camel:ldap
+org.apache.camel.component.ldif.LdifComponent=camel:ldif
+org.apache.camel.component.log.LogComponent=camel:log
+org.apache.camel.component.lucene.LuceneComponent=camel:lucene
+org.apache.camel.component.lumberjack.LumberjackComponent=camel:lumberjack
+org.apache.camel.component.mail.MailComponent=camel:mail
+org.apache.camel.component.master.MasterComponent=camel:master
+org.apache.camel.component.metrics.MetricsComponent=camel:metrics
+org.apache.camel.component.micrometer.MicrometerComponent=camel:micrometer
+org.apache.camel.component.microprofile.metrics.MicroProfileMetricsComponent=camel:microprofile-metrics
+org.apache.camel.component.milo.browse.MiloBrowseComponent=camel:milo
+org.apache.camel.component.milo.client.MiloClientComponent=camel:milo
+org.apache.camel.component.milo.server.MiloServerComponent=camel:milo
+org.apache.camel.component.mina.MinaComponent=camel:mina
+org.apache.camel.component.minio.MinioComponent=camel:minio
+org.apache.camel.component.mllp.MllpComponent=camel:mllp
+org.apache.camel.component.mock.MockComponent=camel:mock
+org.apache.camel.component.mongodb.MongoDbComponent=camel:mongodb
+org.apache.camel.component.mongodb.gridfs.GridFsComponent=camel:mongodb-gridfs
+org.apache.camel.component.mustache.MustacheComponent=camel:mustache
+org.apache.camel.component.mvel.MvelComponent=camel:mvel
+org.apache.camel.component.mybatis.MyBatisBeanComponent=camel:mybatis
+org.apache.camel.component.mybatis.MyBatisComponent=camel:mybatis
+org.apache.camel.component.nats.NatsComponent=camel:nats
+org.apache.camel.component.netty.NettyComponent=camel:netty
+org.apache.camel.component.netty.http.NettyHttpComponent=camel:netty-http
+org.apache.camel.component.nitrite.NitriteComponent=camel:nitrite
+org.apache.camel.component.olingo2.Olingo2Component=camel:olingo2
+org.apache.camel.component.olingo4.Olingo4Component=camel:olingo4
+org.apache.camel.component.openshift.build_configs.OpenshiftBuildConfigsComponent=camel:kubernetes
+org.apache.camel.component.openshift.builds.OpenshiftBuildsComponent=camel:kubernetes
+org.apache.camel.component.openshift.deploymentconfigs.OpenshiftDeploymentConfigsComponent=camel:kubernetes
+org.apache.camel.component.openstack.cinder.CinderComponent=camel:openstack
+org.apache.camel.component.openstack.glance.GlanceComponent=camel:openstack
+org.apache.camel.component.openstack.keystone.KeystoneComponent=camel:openstack
+org.apache.camel.component.openstack.neutron.NeutronComponent=camel:openstack
+org.apache.camel.component.openstack.nova.NovaComponent=camel:openstack
+org.apache.camel.component.openstack.swift.SwiftComponent=camel:openstack
+org.apache.camel.component.optaplanner.OptaPlannerComponent=camel:optaplanner
+org.apache.camel.component.paho.PahoComponent=camel:paho
+org.apache.camel.component.paho.mqtt5.PahoMqtt5Component=camel:paho-mqtt5
+org.apache.camel.component.pdf.PdfComponent=camel:pdf
+org.apache.camel.component.pg.replication.slot.PgReplicationSlotComponent=camel:pg-replication-slot
+org.apache.camel.component.pgevent.PgEventComponent=camel:pgevent
+org.apache.camel.component.platform.http.PlatformHttpComponent=camel:platform-http
+org.apache.camel.component.printer.PrinterComponent=camel:printer
+org.apache.camel.component.pubnub.PubNubComponent=camel:pubnub
+org.apache.camel.component.pulsar.PulsarComponent=camel:pulsar
+org.apache.camel.component.quartz.QuartzComponent=camel:quartz
+org.apache.camel.component.quickfixj.QuickfixjComponent=camel:quickfix
+org.apache.camel.component.rabbitmq.RabbitMQComponent=camel:rabbitmq
+org.apache.camel.component.reactive.streams.ReactiveStreamsComponent=camel:reactive-streams
+org.apache.camel.component.redis.RedisComponent=camel:spring-redis
+org.apache.camel.component.ref.RefComponent=camel:ref
+org.apache.camel.component.rest.RestApiComponent=camel:rest
+org.apache.camel.component.rest.RestComponent=camel:rest
+org.apache.camel.component.rest.openapi.RestOpenApiComponent=camel:rest-openapi
+org.apache.camel.component.rest.swagger.RestSwaggerComponent=camel:rest-swagger
+org.apache.camel.component.resteasy.ResteasyComponent=camel:resteasy
+org.apache.camel.component.robotframework.RobotFrameworkComponent=camel:robotframework
+org.apache.camel.component.rss.RssComponent=camel:rss
+org.apache.camel.component.saga.SagaComponent=camel:saga
+org.apache.camel.component.salesforce.SalesforceComponent=camel:salesforce
+org.apache.camel.component.sap.netweaver.NetWeaverComponent=camel:sap-netweaver
+org.apache.camel.component.scheduler.SchedulerComponent=camel:scheduler
+org.apache.camel.component.schematron.SchematronComponent=camel:schematron
+org.apache.camel.component.scp.ScpComponent=camel:jsch
+org.apache.camel.component.seda.SedaComponent=camel:seda
+org.apache.camel.component.service.ServiceComponent=camel:service
+org.apache.camel.component.servicenow.ServiceNowComponent=camel:servicenow
+org.apache.camel.component.servlet.ServletComponent=camel:servlet
+org.apache.camel.component.sjms.SjmsComponent=camel:sjms
+org.apache.camel.component.sjms2.Sjms2Component=camel:sjms2
+org.apache.camel.component.slack.SlackComponent=camel:slack
+org.apache.camel.component.smpp.SmppComponent=camel:smpp
+org.apache.camel.component.snmp.SnmpComponent=camel:snmp
+org.apache.camel.component.solr.SolrComponent=camel:solr
+org.apache.camel.component.spark.SparkComponent=camel:spark
+org.apache.camel.component.splunk.SplunkComponent=camel:splunk
+org.apache.camel.component.splunkhec.SplunkHECComponent=camel:splunk-hec
+org.apache.camel.component.spring.batch.SpringBatchComponent=camel:spring-batch
+org.apache.camel.component.spring.integration.SpringIntegrationComponent=camel:spring-integration
+org.apache.camel.component.spring.jdbc.SpringJdbcComponent=camel:spring-jdbc
+org.apache.camel.component.spring.ws.SpringWebserviceComponent=camel:spring-ws
+org.apache.camel.component.springldap.SpringLdapComponent=camel:spring-ldap
+org.apache.camel.component.springrabbit.SpringRabbitMQComponent=camel:spring-rabbitmq
+org.apache.camel.component.sql.SqlComponent=camel:sql
+org.apache.camel.component.sql.stored.SqlStoredComponent=camel:sql
+org.apache.camel.component.ssh.SshComponent=camel:ssh
+org.apache.camel.component.stax.StAXComponent=camel:stax
+org.apache.camel.component.stitch.StitchComponent=camel:stitch
+org.apache.camel.component.stomp.StompComponent=camel:stomp
+org.apache.camel.component.stream.StreamComponent=camel:stream
+org.apache.camel.component.stringtemplate.StringTemplateComponent=camel:stringtemplate
+org.apache.camel.component.stub.StubComponent=camel:stub
+org.apache.camel.component.telegram.TelegramComponent=camel:telegram
+org.apache.camel.component.thrift.ThriftComponent=camel:thrift
+org.apache.camel.component.tika.TikaComponent=camel:tika
+org.apache.camel.component.timer.TimerComponent=camel:timer
+org.apache.camel.component.twilio.TwilioComponent=camel:twilio
+org.apache.camel.component.twitter.directmessage.TwitterDirectMessageComponent=camel:twitter
+org.apache.camel.component.twitter.search.TwitterSearchComponent=camel:twitter
+org.apache.camel.component.twitter.timeline.TwitterTimelineComponent=camel:twitter
+org.apache.camel.component.undertow.UndertowComponent=camel:undertow
+org.apache.camel.component.validator.ValidatorComponent=camel:validator
+org.apache.camel.component.velocity.VelocityComponent=camel:velocity
+org.apache.camel.component.vertx.VertxComponent=camel:vertx
+org.apache.camel.component.vertx.http.VertxHttpComponent=camel:vertx-http
+org.apache.camel.component.vertx.kafka.VertxKafkaComponent=camel:vertx-kafka
+org.apache.camel.component.vertx.websocket.VertxWebsocketComponent=camel:vertx-websocket
+org.apache.camel.component.vm.VmComponent=camel:vm
+org.apache.camel.component.weather.WeatherComponent=camel:weather
+org.apache.camel.component.web3j.Web3jComponent=camel:web3j
+org.apache.camel.component.webhook.WebhookComponent=camel:webhook
+org.apache.camel.component.websocket.WebsocketComponent=camel:websocket
+org.apache.camel.component.weka.WekaComponent=camel:weka
+org.apache.camel.component.whatsapp.WhatsAppComponent=camel:whatsapp
+org.apache.camel.component.wordpress.WordpressComponent=camel:wordpress
+org.apache.camel.component.workday.WorkdayComponent=camel:workday
+org.apache.camel.component.xchange.XChangeComponent=camel:xchange
+org.apache.camel.component.xj.XJComponent=camel:xj
+org.apache.camel.component.xmlsecurity.XmlSignerComponent=camel:xmlsecurity
+org.apache.camel.component.xmlsecurity.XmlVerifierComponent=camel:xmlsecurity
+org.apache.camel.component.xmpp.XmppComponent=camel:xmpp
+org.apache.camel.component.xquery.XQueryComponent=camel:saxon
+org.apache.camel.component.xslt.XsltComponent=camel:xslt
+org.apache.camel.component.xslt.saxon.XsltSaxonComponent=camel:xslt-saxon
+org.apache.camel.component.zendesk.ZendeskComponent=camel:zendesk
+org.apache.camel.component.zookeeper.ZooKeeperComponent=camel:zookeeper
+org.apache.camel.component.zookeepermaster.MasterComponent=camel:zookeeper-master
+org.apache.camel.oaipmh.component.OAIPMHComponent=camel:oaipmh
+org.apache.camel.websocket.jsr356.JSR356WebSocketComponent=camel:websocket-jsr356
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownDependenciesResolver.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownDependenciesResolver.java
index 9adb8826a18..4988c0132e7 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownDependenciesResolver.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownDependenciesResolver.java
@@ -33,8 +33,13 @@ public final class KnownDependenciesResolver {
     }
 
     public void loadKnownDependencies() {
+        doLoadKnownDependencies("/camel-main-known-dependencies.properties");
+        
doLoadKnownDependencies("/camel-component-known-dependencies.properties");
+    }
+
+    private void doLoadKnownDependencies(String name) {
         try {
-            InputStream is = 
getClass().getResourceAsStream("/camel-main-known-dependencies.properties");
+            InputStream is = getClass().getResourceAsStream(name);
             if (is != null) {
                 Properties prop = new Properties();
                 prop.load(is);
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareKameletMainMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareKameletMainMojo.java
new file mode 100644
index 00000000000..a3257178592
--- /dev/null
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareKameletMainMojo.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ *      http://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.apache.camel.maven.packaging;
+
+import java.io.File;
+import java.io.IOError;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+import java.util.stream.Collectors;
+
+import org.apache.camel.tooling.model.ArtifactModel;
+import org.apache.camel.tooling.model.BaseModel;
+import org.apache.camel.tooling.model.JsonMapper;
+import org.apache.camel.tooling.util.FileUtil;
+import org.apache.camel.tooling.util.PackageHelper;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.sonatype.plexus.build.incremental.BuildContext;
+
+import static 
org.apache.camel.maven.packaging.generics.PackagePluginUtils.joinHeaderAndSource;
+import static org.apache.camel.tooling.util.PackageHelper.loadText;
+
+/**
+ * Prepares camel-kamelet-main
+ */
+@Mojo(name = "prepare-kamelet-main", threadSafe = true)
+public class PrepareKameletMainMojo extends AbstractMojo {
+
+    /**
+     * The maven project.
+     */
+    @Parameter(property = "project", required = true, readonly = true)
+    protected MavenProject project;
+
+    /**
+     * Maven ProjectHelper.
+     */
+    @Component
+    protected MavenProjectHelper projectHelper;
+
+    /**
+     * build context to check changed files and mark them for refresh (used 
for m2e compatibility)
+     */
+    @Component
+    protected BuildContext buildContext;
+
+    /**
+     * The camel-catalog directory
+     */
+    @Parameter(defaultValue = 
"${project.directory}/../../../catalog/camel-catalog")
+    protected File catalogDir;
+
+    @Parameter(defaultValue = "src/generated/")
+    protected File genDir;
+
+    private Collection<Path> allJsonFiles;
+    private final Map<Path, BaseModel<?>> allModels = new HashMap<>();
+    private transient String licenseHeader;
+
+    /**
+     * Execute goal.
+     *
+     * @throws MojoExecutionException execution of the main class or one of 
the threads it generated failed.
+     * @throws MojoFailureException   something bad happened...
+     */
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        try {
+            updateKnownDependencies();
+        } catch (Exception e) {
+            throw new MojoFailureException("Error updating 
camel-component-known-dependencies.properties", e);
+        }
+    }
+
+    protected void updateKnownDependencies() throws Exception {
+        allJsonFiles = new TreeSet<>();
+
+        File path = new File(catalogDir, 
"src/generated/resources/org/apache/camel/catalog/components");
+        for (File p : path.listFiles()) {
+            String f = p.getName();
+            if (f.endsWith(PackageHelper.JSON_SUFIX)) {
+                allJsonFiles.add(p.toPath());
+            }
+        }
+
+        for (Path p : allJsonFiles) {
+            var m = JsonMapper.generateModel(p);
+            if (m != null) {
+                allModels.put(p, m);
+            }
+        }
+
+        List<String> lines = new ArrayList<>();
+        for (BaseModel model : allModels.values()) {
+            String fqn = model.getJavaType();
+            if (model instanceof ArtifactModel) {
+                String aid = ((ArtifactModel<?>) model).getArtifactId();
+                if (aid.startsWith("camel-")) {
+                    aid = aid.substring(6);
+                }
+                String line = fqn + "=camel:" + aid;
+                lines.add(line);
+            }
+        }
+        // remove duplicate
+        lines = lines.stream().distinct().collect(Collectors.toList());
+        // and sort
+        Collections.sort(lines);
+
+        // load license header
+        try (InputStream is = 
getClass().getClassLoader().getResourceAsStream("license-header.txt")) {
+            this.licenseHeader = loadText(is);
+        } catch (Exception e) {
+            throw new MojoFailureException("Error loading license-header.txt 
file", e);
+        }
+
+        String source = String.join("\n", lines) + "\n";
+        writeSourceIfChanged(source, "resources", 
"camel-component-known-dependencies.properties", genDir);
+    }
+
+    protected boolean writeSourceIfChanged(String source, String filePath, 
String fileName, File outputDir)
+            throws MojoFailureException {
+        Path target = outputDir.toPath().resolve(filePath).resolve(fileName);
+
+        try {
+            final String code = joinHeaderAndSource(licenseHeader, source);
+
+            if (getLog().isDebugEnabled()) {
+                getLog().debug("Source code generated:\n" + code);
+            }
+
+            return updateResource(buildContext, target, code);
+        } catch (Exception e) {
+            throw new MojoFailureException("IOError with file " + target, e);
+        }
+    }
+
+    public static boolean updateResource(BuildContext buildContext, Path out, 
String data) {
+        try {
+            if (FileUtil.updateFile(out, data)) {
+                refresh(buildContext, out);
+                return true;
+            }
+        } catch (IOException e) {
+            throw new IOError(e);
+        }
+        return false;
+    }
+
+    public static void refresh(BuildContext buildContext, Path file) {
+        if (buildContext != null) {
+            buildContext.refresh(file.toFile());
+        }
+    }
+
+}

Reply via email to