当前位置: 首页 > 知识库问答 >
问题:

JAVATalend Studio中的lang.NoClassDefFoundError

姬英武
2023-03-14

我想安装一些Google Cloud Java客户端库,以便在tJava组件中使用它(我不想使用talend的预构建组件)。

我正在尝试一个带有tJava组件的作业的测试。这是我想要运行的代码:

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService(); 

在advance设置中,我导入以下库:

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;

要设置以下库,我执行了以下步骤:

>

  • 我从https://search.maven.org/search?q=g下载了最后一个版本的神器google-Cloud-bigQuery:com.google.cloudAND a: google-Cloud-bigQuery

    我从https://mvnrepository.com/artifact/com.google.cloud/google-cloud-core/1.94.0下载了最新版本的神器google-Cloud-core

    我把这两个罐子放在下面的文件夹里:

    -...\TALEND STUDIO \配置。m2\repository\com\google\cloud\google cloud bigquery\1.126.3\google-cloud-bigquery-1.126.3。罐子

    -...\TALEND Studio\配置. m2\repository\com\google\Cloud\google-Cloud-core\1.94.0\google-Cloud-core-1.94.0

    从navigator选项卡打开: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>
    

    线程“main”java中出现异常。lang.NoClassDefFoundError:com/google/cloud/bigquery/BigQueryOptions位于bce_数据中心。bigquery_模板_0_1。bigquery_模板。bce_数据中心的tJava_1进程(bigquery_template.java:331)。bigquery_模板_0_1。bigquery_模板。在bce_数据中心运行JobIntos(bigquery_template.java:638)。bigquery_模板_0_1。bigquery_模板。main(bigquery_template.java:464)由:java引起。lang.ClassNotFoundException:com.google.云bigquery。java的大查询选项。网URLClassLoader。java上的findClass(URLClassLoader.java:382)。lang.ClassLoader。sun上的loadClass(ClassLoader.java:424)。杂项。Launcher$AppClassLoader。java上的loadClass(Launcher.java:349)。lang.ClassLoader。loadClass(ClassLoader.java:357)。。。还有3个

    我从这个帖子中看到了为什么Java中会出现NoClassDefFoundError?问题的原因是在运行时找不到类代码。我不知道如何将类(jar)放入运行时路径。

    谢谢你的帮助。

    编辑:

    我不知道它是否有用,但我把我隐藏的所有pom.xml.(与xxx)的一部分用于隐私。我认为模块列表(talend作业)没有用,所以我删除了列表的一部分:

    <?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>
    
  • 共有3个答案

    龚勇锐
    2023-03-14

    pom.xml文件中的依赖项加载在maven存储库中~/. m2/(在您的情况下是...\TALEND stuIO\配置. m2\存储库)。主要用于编译(带有编译范围)

    在执行jar时,Java无法访问这些jar,可能是因为它们不在类路径或同一目录中。

    最简单的解决方案是将添加的两个新依赖项jar放置到应用程序的jar存在的同一个目录中,或者在java的PATH环境变量中添加这些jars的路径。

    使用java可见的JAR执行应用程序,这将解决问题。

    王飞英
    2023-03-14

    您应该在pom.xml中做出适当的定义(使用Eclipse中的pom.xml选项卡编辑文本)。另请参见Maven文档。

      <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>
        <!-- other dependencies -->
      </dependencies>
    

    Maven负责向编译路径和运行时路径添加依赖项。

    全鸿晖
    2023-03-14

    作业的POM文件是由studio操作生成的,因此我避免手动编辑它们。

    还有其他方法可以实现这一点,首先我建议看看tLibraryLoad组件来添加依赖关系罐:https://help.talend.com/r/lw17672ujtsKAM3zY5H2oQ/wcAnfUMxgsm90CCS6~jiZw

    如果您有2-3个以上的jar文件,您也可以通过例程处理依赖项,然后将例程设置为作业的依赖项。请记住,如果您的SDK有额外的依赖jars,那么也应该添加它们。

     类似资料:
    • 我使用子JPanel构造JScrollPane,然后尝试将JScrollPane添加到父JPanel中,希望有一个可滚动的自定义JPanel。 我有一个大的细白线前面的所有我的组件,他们是没有滚动。有什么想法吗?

    • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

    • 我有一个使用Java Version8的Spring和Maven的项目。当我运行maven update时,它适用于Java9或更高版本,当我编译它时,它适用于Java8。我注意到了这一点,因为用Maven更新会将一个特定的类更改为Java9,而我无法导入这个类。 这个类是:javax.annotation.generated(Java8)。 这是要导入的类。但是,当我进行maven更新时,文件的

    • 当应用程序启动EncryptionBootstrapConfiguration无法自动装配我的自定义TextEncryptor-https://github.com/spring-cloud/spring-cloud-commons/blob/cde7c7f3118382490c28776f66e0a56f248141fd/spring-cloud-context/src/main/java/or

    • 我有一个问题,找出我的源代码中的错误。 有什么办法可以解决它吗? 我的代码中抛出了“ArrayIndexOutOfBoundsException”,但我无法找到它的位置。 android studio中的logcat:

    • RISC-V 与中断相关的寄存器和指令 [info] 回顾:RISC-V 中的机器态(Machine Mode,机器模式,M 模式) 是 RISC-V 中的最高权限模式,一些底层操作的指令只能由机器态进行使用。 是所有标准 RISC-V 处理器都必须实现的模式。 默认所有中断实际上是交给机器态处理的,但是为了实现更多功能,机器态会将某些中断交由内核态处理。这些异常也正是我们编写操作系统所需要实现的