我有一个名为生产者的胖罐子,它可以产生消息。我想用它来生成到MSK无服务器集群的消息。jar接受以下参数-
-topic --num-records --record-size --throughput --producer.config /configLocation/
由于我的MSK无服务器集群使用基于IAM的身份验证,我在producer.config-中提供了以下设置
bootstrap.servers=boot-url
security.protocol=SASL_SSL
sasl.mechanism=AWS_MSK_IAM
sasl.jaas.config=software.amazon.msk.auth.iam.IAMLoginModule required;
sasl.client.callback.handler.class=software.amazon.msk.auth.iam.IAMClientCallbackHandler
这个jar的工作方式通常是通过sasl.jaas.config属性提供用户名和密码。
但是,对于MSK无服务器,我们必须使用附加到EC2实例的IAM角色。
当我使用执行当前jar时
java - jar producer.jar -topic --num-records --record-size --throughput --producer.config /configLocation/
我得到了异常
Exception in thread "main" org.apache.kafka.common.config.ConfigException: Invalid value software.amazon.msk.auth.iam.IAMClientCallbackHandler for configuration sasl.client.callback.handler.class: Class software.amazon.msk.auth.iam.IAMClientCallbackHandler could not be found.
我不明白如何让生产者jar找到外部jar中存在的类aws-msk-iam-auth-1.1.1-all.jar.
任何帮助都将不胜感激,谢谢。
我发现在jar的情况下,使用命令行选项(如--cp(不可能覆盖MANIFEST.MF中指定的类路径。在我的案例中起作用的是让jar的pom包含缺失的依赖项。
当您使用-jar命令行选项以可执行JAR,则Java CLASSPATH环境变量将忽略,并且-cp和-classpath开关也将被忽略,在这种情况下,您可以在META-INF/MMANIFEST.MF文件。
https://javarevisited.blogspot.com/2011/01/how-classpath-work-in-java.html