ClassNotFoundException означает, что класс не найден в вашем classpath .
При локальном запуске из Eclipse классы pulsar-client видимы для процесса javaэто вызывается Eclipse, когда вы нажимаете кнопку запуска.Однако, когда вы запускаете jar на компьютере GCP, вы не включаете классы из pulsar-client jar в ваш путь к классам, и поэтому они отсутствуют:
java -cp pulsar-client-project-0.0.1-SNAPSHOT.jar pulsar_client_project.pulsar_client_project.ConsumerTutorial
Приведенная выше команда утверждает, что путь к классам для javaПроцесс - это стандартные классы JDK, классы из jar pulsar-client-project-0.0.1-SNAPSHOT
и класс, который нужно запустить (main-class): pulsar_client_project.pulsar_client_project.ConsumerTutorial
.
Вам нужно предоставить копию jar pulsar-clientна компьютере GCP и включите его в свой путь к классу.Например,
java -cp pulsar-client-project-0.0.1-SNAPSHOT.jar:pulsar-client.jar pulsar_client_project.pulsar_client_project.ConsumerTutorial
или
java -cp pulsar-client-project-0.0.1-SNAPSHOT.jar;pulsar-client.jar pulsar_client_project.pulsar_client_project.ConsumerTutorial
в зависимости от операционной системы машины GCP (:
обычно является разделителем пути в Unix-подобных операционных системах, тогда как ;
обычно является разделителем пути в Windowsсистемы).Нечто подобное выполняется вашим Eclipse автоматически при локальном запуске.
Потенциально более простой способ сделать это - включить все зависимости проекта в получившийся jar-файл.Если вы измените ваш 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pulsar-client-project</groupId>
<artifactId>pulsar-client-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>pulsar-client-project</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client</artifactId>
<version>2.0.1-incubating</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Здесь определен плагин сборки , который будет включать все зависимости в полученном jar-файле target/pulsar-client-project-0.0.1-SNAPSHOT-jar-with-dependencies
.Вы можете видеть, что его размер составляет ~ 25 МБ, тогда как исходный target/pulsar-client-project-0.0.1-SNAPSHOT.jar
составляет ~ 5 КБ.Вы также можете открыть банки с помощью любой программы для архивирования zip (winzip, peazip, unzip ...) и проверить их содержимое, поскольку формат файла jar основан на формате файла zip .
Теперь, когда вы скопируете файл JAR большего размера на компьютер GCP, вы сможете запустить его так:
java -cp pulsar-client-project-0.0.1-SNAPSHOT-jar-with-dependencies.jar pulsar_client_project.pulsar_client_project.ConsumerTutorial
или
java -cp pulsar-client-project-0.0.1-SNAPSHOT-jar-with-dependencies.jar pulsar_client_project.pulsar_client_project.ProducerTutorial