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

如何让我的java类路径使用命令行和shell脚本工作?

冯亮
2023-03-14

我试图使用jackson databind's的ObjectMapper(不使用maven),但无法将相应的ObjectMapper类集成到我的程序中。

我的文件结构:

 .
├──  First.class
├──  First.java
├──  jackson-databind-2.13.3.jar
├──  run.sh
└──  this.json

First.java:

import com.fasterxml.jackson.databind.ObjectMapper;

public class First {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        System.out.println("Hello world");
    }
}

run.sh:

echo "Compiling..."
javac -cp "./jackson-databind-2.13.3.jar" First.java
echo "Compiled."
echo "----------------"
echo "Output:"
java First

我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
        at First.main(First.java:5)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 1 more

我做错了什么?请帮忙

共有1个答案

澹台胜
2023-03-14

运行时的类路径相同,只是现在还需要先查找。

因此:

java-cp ".:./ jackson-databind-2.13.3.jar"First

<代码>=当前目录(这样在解析完全限定的类名时将找到第一个类)。

:分隔类路径项

./jackson-databind-2.13.3.jar这意味着解析fqncom.fasterxml.jackson.databind.ObjectMapper将找到正确的类。

 类似资料:
  • ENV_SUPATH path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/sbin:/usr/local/scripts ENV_PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/local/games:/usr/games:/usr/local/scripts

  • 问题内容: 如何通过外壳程序脚本执行SQL命令,以使其自动化? 我想使用外壳程序脚本恢复在SQL文件中收集的数据。我想连接到服务器并还原数据。通过SSH命令行单独执行时,该命令有效。 这是我使用的命令: 这是创建文件并将其通过管道传递到mysql 的Shell脚本代码。 正确的方法是什么? 问题答案: 您需要使用该标志来发送密码。这很棘手,因为您和密码之间必须没有空格。 如果在空格之后使mysql

  • 我试图在mongo shell中使用脚本js。我正在读一本关于这个主题的书。我尝试了几个选项,例如在我的计算机的特定位置打开cmd。我在这里发现了一个问题“如何通过shell脚本执行mongo命令?”,但对我来说似乎什么都不管用。我的mongo工作正常,我可以输入mongo,只需在cmd中键入mongo。但是,它找不到js文件。我正在使用Windows;有人知道引擎盖下会发生什么吗? 例如:

  • 问题内容: 我正在编写一个shell脚本,以自动添加新用户并更新其密码。我不知道如何获取passwd来从shell脚本中读取,而不是交互式地提示我输入新密码。我的代码如下。 问题答案: 来自“ ”: 所以你的情况 [ 更新 ]评论中提到了一些问题: 您的命令可能没有选项:按照ashawley的建议使用实用程序。 如果您使用的不是bash外壳,则“echo”可能不是内置命令,外壳将调用。这是不安全的

  • 我有一个带有各种WP-CLI命令的bash脚本,可以运行备份、检查和优化数据库表、运行安全漏洞检查、检查可用的核心、插件和主题更新,然后通过电子邮件将报告发送给我。 如果我从命令行运行这个脚本,它可以完美地工作。但是,如果我调度一个cronjob,脚本将运行,但是所有WP命令的输出如下: /usr/local/bin/dev-maintention-check.bash:第70行:wp:comma

  • 我想运行在kubernetes中使用cron作业的文件中具有ssh命令的外壳脚本 test.sh 当我通过pod手动执行它时,它会抛出错误,并触发作业抛出权限被拒绝的消息。 谁能帮我解决这个问题。