2017-09-13 61 views
1

我剛剛認識駱駝(和Maven),我有這個非常簡單的Java例子:Apache的駱駝「不與方案找到的組件:流」

public static void main(String[] args) throws Exception {  
    CamelContext context = new DefaultCamelContext(); 

    context.addRoutes(new RouteBuilder() { 

      public void configure() { 
      from("direct:in").to("stream:out");  
      } 

    }); 

    context.start(); 

    ProducerTemplate template = context.createProducerTemplate(); 
    template.sendBody("direct:in", "Hello Text World"); 
    template.sendBody("direct:in", "Hello Bytes World".getBytes()); 
} 

我的Maven POM文件包括:

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-stream</artifactId> 
    <version>2.19.2</version> 
</dependency> 

儘管如此,我收到org.apache.camel.FailedToCreateRouteException,因爲沒有組件發現方案:流線

異常「主」 org.apache.camel.FailedToCreateRouteException:無法在以下位置創建路由route1:>>> To [stream:out] < < < route:Route(ro to:沒有找到與組件相關的組件:stream at org.apache.camel .model.RouteDefinition.addRoutes(RouteDefinition.java:1298) at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204) at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java :1087) 在org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3544) 在org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3275) 在org.apache.camel .impl.DefaultCamelContext.access $ 000(DefaultCamelContext.java:202) at org.apache.camel.impl.DefaultCamelContext $ 2.call(DefaultCamelContext.java:3093) at org.apache.camel.impl.DefaultCamelContext $ 2.call(DefaultCamelContext.java:3089) at org.apache.camel。 impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3112) 在org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3089) 在org.apache.camel.support.ServiceSupport.start(ServiceSupport.java: 61) 在org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3026) 在mavenCamelRiding.binFileStreamToCamel.MainStreamRouter.main(MainStreamRouter.java:37) 引起:org.apache.camel.ResolveEndpointFailedException:無法解析端點:stream:// out由於:沒有找到使用scheme:s的組件tream 在org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:729) 在org.apache.camel.util.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:80) 在org.apache.camel.model .RouteDefinition.resolveEndpoint(RouteDefinition.java:219) at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:112) at org.apache.camel.impl.DefaultRouteContext.resolveEndpoint(DefaultRouteContext.java:118 ) at org.apache.camel.model.SendDefinition.resolveEndpoint(SendDefinition.java:62) at org.apache.camel.model.SendDefinition.createProcessor(SendDefinition.java:56) at org.apache.camel.model .ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:549) at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:226) org.apache.camel.model處的org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:510) 。 RouteDefinition.addRoutes(RouteDefinition.java:1295)

任何想法,其中的問題可能是?到目前爲止,Google無法幫助我。

編輯1:這裏是我的POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>mavenCamelRiding</groupId> 
    <artifactId>binFileStreamToCamel</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>binFileStreamToCamel</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
     <version>2.19.2</version> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-stream</artifactId> 
     <version>2.19.2</version> 
    </dependency> 

    </dependencies> 
</project> 

編輯2的其餘部分:

它顯然有事情做與我建立和啓動程序的方式。這讓我感到困惑,因爲到目前爲止我玩過的其他路由選項(jms,activemq,file,bean)沒有任何問題。

我現在測試了構建並在Eclipse中運行,而不是使用控制檯。所以我右鍵擺放了項目文件夾並選擇了「Build Project」。然後我選擇了「Run As」和「Java Application」。 Eclipse控制檯爲我提供了預期的hello-world-output。

爲什麼它不能在控制檯上工作?

編輯3:

現在

代替第一使用 「MVN編譯」,移動到 「目標\類」 文件夾中,然後運行的 「java package.classname」,我執行該:

MVN編譯exec:java -Dexec.mainClass = package.classname

它給了我想要的hello-world-output。

聽起來像一個類路徑問題?如何在沒有maven的情況下啓動示例程序?

+0

您的代碼看起來不錯,因此發佈更多POM內容可能有助於查找問題。 – Tome

+0

您是否在項目上運行clean:install以確保其正確構建? –

+0

我在Eclipse中運行了一個Project Clean幾次。夠了嗎? – numberfourteen

回答

0

現在我有2個選項,在控制檯上運行我的示例程序:

第一種選擇:

MVN編譯高管:JAVA -Dexec.mainClass = package.classname(與pom.xml的文件夾中)

第二個選項:

  1. MVN依賴:複製依賴編譯(在文件夾的pom.xml)
  2. 的java -classpath .. \ dependency * ;. package.classname(在文件夾目標\ classes中)

所以這是一個類路徑問題。它只是沒有解釋,爲什麼在前面的例子中,java能夠找到camel-core和camel-jms而沒有額外的類路徑信息,但沒有camel-stream。

0

我把你的源和我的機器上測試,並能看到輸出,如下圖所示:

文本Hello世界 你好字節世界

這有可能是你的本地.m2目錄丟失駱駝流罐。或者您可以刪除.m2 \ repository \ org \ apache \ camel \ camel-stream \ 2.19.2下的camel-stream文件夾,執行maven clean install並嘗試再次運行。

+0

我已經從.m2中刪除了camel-stream文件夾(第二次嘗試完整的apache文件夾),通過「mvn clean install」重新下載了所有內容(在我的項目中用POM文件在文件夾中執行) 。然後運行「mvn compile」,沒有任何併發​​症。在目標\ classes文件夾中用控制檯中的java命令執行我的程序後,再次出現錯誤。 – numberfourteen