Trivadis IoT卡车模拟器Maven构建运行空指针异常求助
我正尝试运行开源IoT卡车模拟器,需对项目进行二次开发,修改路线点位、新增不同IoT设备以适配自身需求。我已下载项目压缩包,完成IntelliJ环境配置后尝试构建运行,但持续出现多个报错,出现频率最高的报错栈如下:
Exception in thread "main" java.lang.RuntimeException: Error running truck stream generator
at com.hortonworks.labutils.SensorEventsGenerator.generateTruckEventsStream(SensorEventsGenerator.java:43)
at com.hortonworks.solution.Lab.main(Lab.java:277)
Caused by: java.lang.NullPointerException
at java.base/java.util.Arrays.sort(Arrays.java:1249)
at com.hortonworks.simulator.impl.domain.transport.route.TruckRoutesParser.parseAllRoutes(TruckRoutesParser.java:77)
at com.hortonworks.simulator.impl.domain.transport.TruckConfiguration.parseRoutes(TruckConfiguration.java:62)
at com.hortonworks.simulator.impl.domain.transport.TruckConfiguration.initialize(TruckConfiguration.java:38)
at com.hortonworks.labutils.SensorEventsGenerator.generateTruckEventsStream(SensorEventsGenerator.java:25)
... 1 more
根据报错信息定位到Lab.java中getResource与getPath相关代码段:
sensorEventsParam.setNumberOfEvents(1000); sensorEventsParam.setDelayBetweenEvents(delayBetweenEventsMs); System.out.println(Lab.class.getResource("/" + "routes/neom").getPath()); sensorEventsParam.setRouteDirectory(Lab.class.getResource("/" + "routes/neom").getPath()); sensorEventsParam.setTruckSymbolSize(10000); SensorEventsGenerator sensorEventsGenerator = new SensorEventsGenerator(); sensorEventsGenerator.generateTruckEventsStream(sensorEventsParam);
我推测问题来源于路径处理逻辑,因为sensorEventsGenerator.generateTruckEventsStream的报错指向getRouteDirectory方法,而该配置值来源于sensorEventsParam的setRouteDirectory方法赋值。求排查思路与解决方案。
项目pom.xml配置
<modelVersion>4.0.0</modelVersion> <groupId>com.trivadis</groupId> <version>1.0.0</version> <artifactId>iot-truck-simulator</artifactId> <properties> <hadoop.miniclusters.version>0.0.15-SNAPSHOT</hadoop.miniclusters.version> <scala.version>2.11</scala.version> <kafka.version>2.2.0</kafka.version> <activemq.version>5.7.0</activemq.version> <rabbitmq.version>5.10.0</rabbitmq.version> <avro.version>1.8.2</avro.version> <akka.version>2.3.16</akka.version> <jpmml.version>1.0.22</jpmml.version> <commons.csv.version>1.2</commons.csv.version> <commons.lang.version>3.7</commons.lang.version> <slf4j.version>1.7.10</slf4j.version> <storm.version>0.10.0.2.3.0.0-2557</storm.version> <storm.hdfs.version>0.10.0.2.3.0.0-2557</storm.hdfs.version> <javax.activation.version>1.2.0</javax.activation.version> <jaxb.api.version>2.3.0</jaxb.api.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.1.1</version> </dependency> <!-- Kafka --> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>${kafka.version}</version> </dependency> <dependency> <groupId>org.apache.avro</groupId> <artifactId>avro</artifactId> <version>1.10.1</version> </dependency> <dependency> <groupId>com.microsoft.azure.sdk.iot</groupId> <artifactId>iot-device-client</artifactId> <version>1.29.0</version> </dependency> <!-- ActiveMQ --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>${activemq.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>${rabbitmq.version}</version> </dependency> <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-remote_${scala.version}</artifactId> <version>${akka.version}</version> </dependency> <dependency> <groupId>org.jpmml</groupId> <artifactId>pmml-evaluator</artifactId> <version>${jpmml.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>${commons.csv.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons.lang.version}</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.11</version> </dependency> <dependency> <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> <version>${javax.activation.version}</version> </dependency> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>${jaxb.api.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>${jaxb.api.version}</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>${jaxb.api.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-idea-plugin</artifactId> <version>2.2.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.6.0</version> <executions> <execution> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.hortonworks.solution.Lab</mainClass> <arguments> <argument>mqtt</argument> </arguments> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.hortonworks.solution.Lab</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.avro</groupId> <artifactId>avro-maven-plugin</artifactId> <version>${avro.version}</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>schema</goal> <goal>protocol</goal> <goal>idl-protocol</goal> </goals> <configuration> <fieldVisibility>private</fieldVisibility> <sourceDirectory>${project.basedir}/src/main/avro</sourceDirectory> </configuration> </execution> </executions> </plugin> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>1.0.0</version> <configuration> <from> <image>openjdk:11.0-jre</image> </from> <to> <image>registry.hub.docker.com/trivadis/iot-truck-simulator</image> <auth> <username>gschmutz</username> </auth> </to> <container> <mainClass>com.hortonworks.solution.Lab</mainClass> <args> <arg>-h</arg> <arg>mosquitto-1</arg> </args> </container> </configuration> </plugin> </plugins> </build>
内容的提问来源于stack exchange,提问作者xodust1

