2017-07-25 44 views
1

我創建了卡夫卡連接實現SinkConnector的一個插件,我使用gradle這個jar任務它打包成jar:卡夫卡連接着」發現一流的發達插件

jar { 
    archiveName='name.jar' 
} 

我把它複製到一個卡夫卡集羣文件夾,我設置了CLASSPATH =我的jar在哪裏。 然後我執行卡夫卡腳本來啓動獨立的連接,它給了我一個錯誤說我的課無法找到:

[2017-07-25 05:15:52,084] WARN could not get type for name mypackage.SplunkSinkConnector from any class loader (org.reflections.Reflections:384) 
org.reflections.ReflectionsException: could not get type for name mypackage.SplunkSinkConnector 
     at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:378) 
     at org.reflections.ReflectionUtils.forNames(ReflectionUtils.java:397) 
     at org.reflections.Reflections.getSubTypesOf(Reflections.java:367) 
     at org.apache.kafka.connect.runtime.PluginDiscovery.connectorPlugins(PluginDiscovery.java:76) 
     at org.apache.kafka.connect.runtime.PluginDiscovery.scanClasspathForPlugins(PluginDiscovery.java:70) 
     at org.apache.kafka.connect.runtime.AbstractHerder$1.run(AbstractHerder.java:354) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: mypackage.SplunkSinkConnector 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:376) 
     ... 6 more 
[2017-07-25 05:15:52,419] INFO Reflections took 1586 ms to scan 62 urls, producing 3002 keys and 15379 values (org.reflections.Reflections:229) 
[2017-07-25 05:15:52,420] WARN could not get type for name mypackage.SplunkSinkConnector from any class loader (org.reflections.Reflections:384) 
org.reflections.ReflectionsException: could not get type for name mypackage.SplunkSinkConnector 
     at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:378) 
     at org.reflections.ReflectionUtils.forNames(ReflectionUtils.java:397) 
     at org.reflections.Reflections.getSubTypesOf(Reflections.java:367) 
     at org.apache.kafka.connect.runtime.ConnectorFactory.getConnectorClass(ConnectorFactory.java:69) 
     at org.apache.kafka.connect.runtime.ConnectorFactory.newConnector(ConnectorFactory.java:38) 
     at org.apache.kafka.connect.runtime.AbstractHerder.getConnector(AbstractHerder.java:334) 
     at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:233) 
     at org.apache.kafka.connect.runtime.standalone.StandaloneHerder.putConnectorConfig(StandaloneHerder.java:159) 
     at org.apache.kafka.connect.cli.ConnectStandalone.main(ConnectStandalone.java:93) 
Caused by: java.lang.ClassNotFoundException: mypackage.SplunkSinkConnector 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     at org.reflections.ReflectionUtils.forName(ReflectionUtils.java:376) 
     ... 8 more 

任何想法,爲什麼不拿起我的罐子?

謝謝

================================

編輯:Kakfa連接版本10.2.1,根據腳本,classpath計算方法如下:CLASSPATH =「$ CLASSPATH」:「$ KAFKA_HOME/libs/*」

+0

請加卡夫卡連接的版本號信息CLASSPATH取決於版本已更改爲幫助調試? –

+0

Kakfa Connect版本10.2.1,根據腳本,classpath計算公式如下: CLASSPATH =「$ CLASSPATH」:「$ KAFKA_HOME/libs/*」 – frm

+0

我使用帶有Kafka Connect的自定義插件並通過CLASSPATH環境加載變量,它適用於我。 – clay

回答

0

您可以檢查您的.jar文件以確保該類存在。使用斯卡拉的JVM殼:

// Or Maybe try $CLASSPATH with the full classpath that you are using. 
scala -classpath path-to-jar.jar 
// If class is not loaded, this will trigger an error. 
classOf[mypackage.SplunkSinkConnector] 

僅供參考,我做的正是這一點,使用自定義.jar通過CLASSPATH環境變量卡夫卡連接加載插件。我的插件是build.gradle這個文件。 IMO,這是用一些簡單的依賴關係構建Java .jar的最簡單方法。我建立與gradle jar罐子,它會在./build/libs/(project-name).jar創建:

apply plugin: 'java' 
apply plugin: 'idea' 

sourceCompatibility = 1.8 

repositories { 
    mavenLocal() 
    mavenCentral() 
    maven { url "http://packages.confluent.io/maven/" } 
} 

configurations { 
    all*.exclude group: 'org.slf4j', module: 'slf4j-log4j12' 
    all*.exclude group: 'log4j' 
} 

dependencies { 
    compile 'io.confluent:kafka-connect-storage-partitioner:3.2.1' 
    compile 'org.apache.kafka:connect-api:0.10.2.1' 

    testCompile 'junit:junit:4.+' 
} 

idea { 
    project { 
     languageLevel = '1.8' 
    } 
} 
+0

我可以在BOOT-INF/classes/mypackage/SplunkSinkConnector.class中的jar中看到.class文件。 – frm

+0

如何構建您的jar文件? :) – frm

+0

我更新了插件構建設置的答案。 – clay