0

0

Java集成ONNX Runtime:解决“包不存在”错误与类路径配置

DDD

DDD

发布时间:2025-09-25 13:23:23

|

824人浏览过

|

来源于php中文网

原创

Java集成ONNX Runtime:解决“包不存在”错误与类路径配置

本教程旨在解决Java项目中导入ONNX Runtime时常见的“包不存在”错误。即使已通过Maven添加依赖,直接使用javac或java命令仍可能因类路径配置不当而失败。文章将深入探讨类路径的工作原理,并提供在手动编译和执行Java应用程序时正确指定ONNX Runtime依赖的解决方案,确保模型推理功能正常运行。

引言:Java中ONNX Runtime导入困境

在java应用程序中集成onnx runtime以进行机器学习模型推理,是许多开发者面临的常见需求。然而,即使在项目中正确配置了maven依赖,部分用户在尝试编译或运行时,仍可能遭遇“包不存在”(package does not exist)的错误。这通常发生在直接使用javac或java命令行工具,而非通过maven构建生命周期管理项目时。

例如,当用户在pom.xml中添加了ONNX Runtime依赖后:



    4.0.0

    org.example
    test_first
    1.0-SNAPSHOT

    
        11
        11
        UTF-8
    

    
        
            com.microsoft.onnxruntime
            onnxruntime
            1.13.1
        
    

并且Java代码尝试导入相关类:

package org.example;

import ai.onnxruntime.OrtEnvironment;
// import ai.onnxruntime.OrtSession.Result.*; // 尝试导入此包时可能报错

public class Main {
    public static void main(String[] args) {
        var env = OrtEnvironment.getEnvironment();
        System.out.println("ONNX Runtime环境已初始化。");
    }
}

直接通过javac编译时,可能会遇到如下错误:

src/main/java/org/example/Main.java:3: error: package ai.onnxruntime.OrtSession.Result does not exist
import ai.onnxruntime.OrtSession.Result.*;
^
1 error

这表明Java编译器无法找到ai.onnxruntime包,尽管Maven已经下载了对应的JAR包到本地仓库。问题的核心在于Java的类路径(Classpath)机制。

立即学习Java免费学习笔记(深入)”;

理解Java类路径与依赖管理

Maven的作用: Maven是一个项目管理和理解工具,它通过pom.xml文件定义项目的依赖、构建过程和项目结构。当执行mvn install或mvn compile等命令时,Maven会自动从远程仓库下载所需的JAR包(例如onnxruntime-1.13.1.jar)到本地Maven仓库(通常位于用户主目录下的.m2/repository)。它也负责在构建过程中将这些依赖添加到编译和运行时的类路径中。

javac和java命令行的局限性:

  • javac (Java编译器): 负责将.java源文件编译成.class字节码文件。在编译时,javac需要知道所有被引用类的位置。
  • java (Java虚拟机/解释器): 负责加载并执行.class文件。在运行时,java虚拟机需要知道所有运行时所需类的位置。

当直接在命令行中使用javac或java时,它们并不会自动读取pom.xml文件来获取依赖信息。因此,即使Maven已经将ONNX Runtime的JAR包下载到本地,javac和java也无法默认找到这些类,除非通过类路径参数明确告知它们。

解决方案一:利用Maven构建生命周期(推荐)

对于Maven项目,最推荐且最健壮的方法是始终通过Maven自身的命令来管理编译、打包和运行。Maven会自动处理所有依赖的类路径配置。

  1. 编译项目:

    mvn clean compile

    这条命令会清理旧的编译产物,然后根据pom.xml下载所有依赖,并将项目的.java文件编译成.class文件。此时,Maven会自动将ONNX Runtime的JAR包包含在编译器的类路径中。

    Type Studio
    Type Studio

    一个视频编辑器,提供自动转录、自动生成字幕、视频翻译等功能

    下载
  2. 打包项目:

    mvn package

    这条命令会编译项目,并将其打包成JAR或WAR文件。如果需要一个包含所有依赖的“胖JAR”(fat JAR),可以使用maven-assembly-plugin或maven-shade-plugin。

  3. 运行项目(使用Maven插件): 要直接运行主类,可以使用exec-maven-plugin。首先,在pom.xml中配置该插件:

    
        
            
                org.codehaus.mojo
                exec-maven-plugin
                3.1.0 
                
                    
                        
                            java
                        
                    
                
                
                    org.example.Main 
                
            
        
    

    然后,通过以下命令运行:

    mvn exec:java

    Maven会自动构建类路径并执行指定的mainClass。

解决方案二:手动指定类路径进行编译与执行

如果出于特定原因,必须直接使用javac或java命令行工具,那么就需要手动通过-cp(或-classpath)参数来指定ONNX Runtime的JAR包路径。

1. 定位ONNX Runtime的JAR包: ONNX Runtime的JAR包通常位于你的本地Maven仓库中。其路径结构为: ~/.m2/repository/com/microsoft/onnxruntime/onnxruntime//onnxruntime-.jar

例如,对于版本1.13.1,在macOS/Linux上可能是: /Users/你的用户名/.m2/repository/com/microsoft/onnxruntime/onnxruntime/1.13.1/onnxruntime-1.13.1.jar

在Windows上可能是: C:\Users\你的用户名\.m2\repository\com\microsoft\onnxruntime\onnxruntime\1.13.1\onnxruntime-1.13.1.jar

2. 手动编译 (javac): 在编译时,你需要将ONNX Runtime的JAR包添加到javac的类路径中。

  • Linux/macOS示例:
    javac -cp "/Users/XXXX/.m2/repository/com/microsoft/onnxruntime/onnxruntime/1.13.1/onnxruntime-1.13.1.jar" src/main/java/org/example/Main.java
  • Windows示例:
    javac -cp "C:\Users\XXXX\.m2\repository\com\microsoft\onnxruntime\onnxruntime\1.13.1\onnxruntime-1.13.1.jar" src\main\java\org\example\Main.java

    请注意,Windows路径使用反斜杠\作为分隔符,而类路径中的多个条目则使用分号;分隔。

3. 手动执行 (java): 执行Java应用程序时,同样需要指定类路径。

  • 对于Java 11+的单文件执行 (JEP 330): Java 11引入了JEP 330,允许直接运行单个源文件,无需显式编译。但仍需指定类路径。

    • Linux/macOS示例:
      java -cp "/Users/XXXX/.m2/repository/com/microsoft/onnxruntime/onnxruntime/1.13.1/onnxruntime-1.13.1.jar" src/main/java/org/example/Main.java
    • Windows示例:
      java -cp "C:\Users\XXXX\.m2\repository\com\microsoft\onnxruntime\onnxruntime\1.13.1\onnxruntime-1.13.1.jar" src\main\java\org\example\Main.java
  • 对于已编译的.class文件执行: 如果已经通过javac编译生成了.class文件(例如在target/classes目录下),则执行时需要将ONNX Runtime的JAR包路径和你的程序类路径(通常是当前目录.或编译输出目录)都包含在-cp参数中。

    • Linux/macOS示例:
      java -cp "/Users/XXXX/.m2/repository/com/microsoft/onnxruntime/onnxruntime/1.13.1/onnxruntime-1.13.1.jar:." org.example.Main

      (注意使用冒号:分隔类路径条目)

    • Windows示例:
      java -cp "C:\Users\XXXX\.m2\repository\com\microsoft\onnxruntime\onnxruntime\1.13.1\onnxruntime-1.13.1.jar;." org.example.Main

      (注意使用分号;分隔类路径条目)

注意事项与最佳实践

  1. 优先使用Maven/Gradle: 对于任何非最简单的Java项目,强烈建议使用Maven或Gradle等构建工具。它们能够自动化依赖管理和类路径配置,显著提高开发效率并减少错误。
  2. 版本一致性: 确保pom.xml中声明的ONNX Runtime版本与手动指定JAR包的路径版本一致。
  3. 传递性依赖: ONNX Runtime本身可能依赖其他库。当手动指定类路径时,理论上你需要将所有这些传递性依赖的JAR包也一并加入类路径。这是手动管理类路径的复杂之处,也是构建工具的巨大优势。
  4. IDE集成: 现代集成开发环境(IDE),如IntelliJ IDEA、Eclipse或VS Code,在导入Maven项目后,会自动解析pom.xml并配置好编译和运行时的类路径,因此在IDE内部通常不会遇到此类问题。
  5. 跨平台兼容性: 命令行中的路径分隔符(Windows的;和\,Linux/macOS的:和/)是常见的混淆点,务必根据操作系统正确使用。

总结

“包不存在”错误在Java项目中,尤其是在涉及外部库时,是一个典型的类路径问题。理解Java的类路径机制是解决这类问题的关键。对于Maven项目,最佳实践是利用Maven自身的构建和运行命令来自动化类路径管理。如果必须手动操作,则需要通过javac和java命令的-cp参数,明确指定所有必需的依赖JAR包路径。掌握这些知识,将有助于开发者更有效地在Java应用程序中集成和使用ONNX Runtime,顺利进行模型推理任务。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

868

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

745

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

741

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

420

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

447

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

431

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16948

2023.08.03

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号