【问题标题】:Importing external JAR with NoClassDefFoundError - depedencies使用 NoClassDefFoundError 导入外部 JAR - 依赖项
【发布时间】:2021-09-07 20:27:05
【问题描述】:

我必须在我的项目中使用由另一个团队作为.jar 文件提供的库。但是,当我使用这个库运行代码时,我得到了NoClassDefFoundError。我已经进行了一些调查,我知道如果外部团队将创建 jar 并在类路径上具有所有需要的依赖项(例如 lib 文件夹),则可以避免这种情况。所以我的理解是,然后我可以导入提到的库,所有需要的子 jar 都将在文件夹 lib 中。问题:我的想法正确吗?我应该要求另一个团队为 lib 提供所有子 jar 依赖项吗?这个解决方案是否有任何替代方案,而不提供 jar 内部的所有依赖项,从而避免此类错误?

【问题讨论】:

  • 你用maven吗?如果是,请他们在您的组织存储库中使用适当的依赖项使其成为 maven 工件。
  • 是的,我使用的是 maven。所以问题是这个库是从这个存储库中取出的,因为组织原因(目前不能保存在那里)。所以这就是为什么我需要临时处理它作为导入到项目的外部 .jar :)
  • 获取他们的资源。在您的机器上构建并安装工件。将工件添加到您的 Pom.xml。即时依赖。

标签: java jar executable-jar


【解决方案1】:

如果你可以用maven编译你的项目,那么必须有所有需要的jar文件。如果你只选择你的“jar”文件并执行它,它会失败,因为你必须在类路径中包含依赖项。

另一种选择是构建包含所有依赖项的 jar 文件。

例如,使用 maven-assembly-plugin

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.path.to.your.MainClass</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <appendAssemblyId>false</appendAssemblyId>        
    </configuration>
</plugin>

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 1970-01-01
    • 2018-01-31
    • 2011-11-22
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多