我想安装一些Google Cloud Java客户端库以在tJava组件中使用它(我不想使用talend的pre-build组件)。
我正在尝试对带有tJava组件的工作进行测试。这是我要运行的代码:
BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
在高级设置中,我导入以下库:
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
要设置以下库,我执行了以下步骤:
我从https://search.maven.org/search?q=g:com.google.cloud%20AND%20a:google-cloud-bigquery&core=gav下载了工件google-cloud-bigquery的最新版本
我从https://mvnrepository.com/artifact/com.google.cloud/google-cloud-core/1.94.0下载了工件google-cloud-core的最新版本
我将这两个罐子放在以下文件夹中:
-... \ TALEND STUDIO \ configuration.m2 \ repository \ com \ google \ cloud \ google-cloud-bigquery \ 1.126.3 \ google-cloud-bigquery-1.126.3.jar
-... \ TALEND STUDIO \ configuration.m2 \ repository \ com \ google \ cloud \ google-cloud-core \ 1.94.0 \ google-cloud-core-1.94.0
从导航器选项卡中,打开:NAME_PROJECT / poms / pom.xml,然后添加依赖项,如下所示:
使用底部的“添加”,将pom.xml更改如下:
...
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
<version>1.126.3</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-core</artifactId>
<version>1.94.0</version>
</dependency>
</dependencies>
</project>
线程“主”中的异常java.lang.NoClassDefFoundError:com / google / cloud / bigquery / BigQueryOptions位于bce_datahub.bigquery_template_0_1.bigquery_template.tJava_1Process(bigquery_template.java:331)位于bce_datahub.bigquery_template_0_1.bigquery_template.runJobInTOS(:bigquery_template) ),位于bce_datahub.bigquery_template_0_1.bigquery_template.main(bigquery_template.java:464)的原因:java.lang.ClassNotFoundException:java.net.URLClassLoader.findClass(URLClassLoader.java:382)上的com.google.cloud.bigquery.BigQueryOptions。在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:349)处的java.lang.ClassLoader.loadClass(ClassLoader.java:424)在java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 3更多的
我从该线程中看到了为什么我会在Java中收到NoClassDefFoundError?该问题是由于在运行时找不到类代码这一事实造成的。我不知道如何将类(罐子)放在运行时路径中。
感谢你的帮助。
编辑:
我不知道它是否有用,但我放置了所有pom.xml。为了保密起见,我将其一部分隐藏(带有xxx)。我认为模块列表(人才工作)没有用,因此我删除了该列表的一部分:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example.xxx</groupId>
<artifactId>code.Master</artifactId>
<version>7.0.1</version>
<packaging>pom</packaging>
<name>xxx Codes Master</name>
<url>http://www.talend.org/</url>
<modules>
<module>code/routines</module>
<module>jobs/process/xxx</module>
<module>jobs/process/xxx/xxx/xxx</module>
<module>...</module>
<module>jobs/process/xxx/xxx/xxx</module>
<module>../../REFERENCE/poms</module>
<module>jobs/process/xxx</module>
</modules>
<properties>
<talend.project.name>xxx</talend.project.name>
<encoding>UTF-8</encoding>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<dependencies>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-jdt</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerId>jdt</compilerId>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>ci-builder</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.talend</groupId>
<artifactId>ci.builder</artifactId>
<version>7.0.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
<version>1.126.3</version>
</dependency>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-core</artifactId>
<version>1.94.0</version>
</dependency>
</dependencies>
</project>
作业的POM文件是由工作室动作生成的,因此我避免手动编辑它们。
还有其他方法可以实现,首先我建议看一下tLibraryLoad组件以添加依赖项jar:https ://help.talend.com/r/lw17672ujtsKAM3zY5H2oQ/wcAnfUMxgsm90CCS6~jiZw
如果你有超过2-3个jar文件,则还可以通过例程处理依赖关系,然后将例程设置为作业的依赖关系。请记住,如果你的SDK包含其他依赖项jar,则也应添加这些依赖项。
非常感谢你。在“存储库”->“代码”->“例程”下,创建一个名为“ BigQuery_libraries”的新例程。然后,右键单击它->“ Edit Routines Libraries”,然后使用按钮“ New”添加所有我的库。最后,我继续工作,右键单击它->“设置rountines依赖关系”,然后在“用户例程”部分下添加例程“ BigQuery_libraries”。有用。这些库已正确加载。再次感谢你。