完全 手动 添加jar包 import commons.lang.StringUtils java classpath

本文详细解析了在Java中手动导入Apache Commons Lang库的过程,包括常见错误及其解决方法,如程序包不存在和类未找到等问题,同时介绍了正确的编译和运行步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

说明,这里是完全手打代码,不依赖于任何ide;现在工具如此丰富,为什么要完全手打呢?虽然工具很好,也有所谓工欲善其事之说,但对于初学者而言,如果太依赖于工具,则容易掉进工具即语言的陷阱里。我之前带过的学生里,就常有人把phpstorm和php、python和pycharm、弄混的现象;所以在基础语法训练的阶段,有必要让学生了解一下核心编程的手动操作方式,以对语言本身及语言的特质有个印象。

问题

有学生在做包练习时,想使用apache-commonsArrayUtils.addAll(Object[], Object[]),代码写成这样子:

import java.lang.*;
import java.util.Arrays;
import org.apache.commons.lang.ArrayUtils;

/**
 * ArrayDemo
 */
public class ArrayDemo {

    public static void main(String[] args) throws Exception {
        String[] groupOne = { "张三丰", "李四光", "王大刀" };
        String[] groupTwo = { "马云", "马化腾", "李彦宏" };

        String[] merged = (String[])ArrayUtils.addAll(groupOne, groupTwo);
        System.out.println(Arrays.toString( merged));
    }
}  

编译上面的代码时,如果直接执行 javac ArrayDemo.java 会遇到类似这样的错误:

(base) ➜  java_web javac ArrayDemo.java
ArrayDemo.java:3: 错误: 程序包org.apache.commons.lang不存在
import org.apache.commons.lang.ArrayUtils;
                              ^
ArrayDemo.java:14: 错误: 找不到符号
        String[] merged = (String[])ArrayUtils.addAll(groupOne, groupTwo);
                                    ^
  符号:   变量 ArrayUtils
  位置: 类 ArrayDemo
2 个错误

分析

这个错误,一般用心学习前面课程的话,都可以找到原因,直接下载[commons-lang的jar包]就可以了(但注意版本的问题,如果你下载的是之前的版本就可以直接引入了,如果你是使用的 commons-lang3-3.x-src.tar.gz的 版本的话,引入时,要写成import org.apache.commons.lang3.ArrayUtils;

解决

下载后的包,记得要在项目文件夹下创建 lib 目录,然后把 jar 包拷贝进去(可以jar包改名,这里名字影响不大),重新编译,编译时,要带上-classpath参数

(base) ➜  java_web javac -cp .:lib/commons-lang.jar ArrayDemo.java

编译后不要直接执行

 java  ArrayDemo  

否则会报错:

(base) ➜   java ArrayDemo 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils
        at ArrayDemo.main(ArrayDemo.java:14)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang3.ArrayUtils
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 1 more

运行时,同样要加上classpath,像这样

(base) ➜  java -cp .:lib/commons-lang.jar ArrayDemo

这样运行就可以正确执行了:

(base) ➜ java -cp .:lib/commons-lang.jar ArrayDemo
[张三丰, 李四光, 王大刀, 马云, 马化腾, 李彦宏]

ps:当然,包也可以放在jre目录下,这样java执行时可以直接执行了,另外,也可以直接设置环境变量classpath实现,为了避免污染环境,因此这里只采用了上述方式;另外通过练习可以延展了解类加载机制。

[root@hadoop01 bin]# sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root -p Warning: /export/servers/sqoop/../hbase does not exist! HBase imports will fail. Please set $HBASE_HOME to the root of your HBase installation. Warning: /export/servers/sqoop/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /export/servers/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 2025-06-16 17:41:30,249 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 2025-06-16 17:41:30,316 ERROR tool.BaseSqoopTool: Error parsing arguments for list-databases: 2025-06-16 17:41:30,316 ERROR tool.BaseSqoopTool: Unrecognized argument: -p Try --help for usage instructions. [root@hadoop01 bin]# vi $SQOOP_HOME/conf/sqoop-env.sh [root@hadoop01 bin]# sqoop version Warning: /export/servers/sqoop/../hbase does not exist! HBase imports will fail. Please set $HBASE_HOME to the root of your HBase installation. Warning: /export/servers/sqoop/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /export/servers/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 2025-06-16 17:57:06,080 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 Sqoop 1.4.7 git commit id 2328971411f57f0cb683dfb79d19d4d19d185dd8 Compiled by maugli on Thu Dec 21 15:59:58 STD 2017 [root@hadoop01 bin]# sqoop list-databases --connect jdbc:mysql://localhost:3306 --username root -P Warning: /export/servers/sqoop/../hbase does not exist! HBase imports will fail. Please set $HBASE_HOME to the root of your HBase installation. Warning: /export/servers/sqoop/../hcatalog does not exist! HCatalog jobs will fail. Please set $HCAT_HOME to the root of your HCatalog installation. Warning: /export/servers/sqoop/../accumulo does not exist! Accumulo imports will fail. Please set $ACCUMULO_HOME to the root of your Accumulo installation. 2025-06-16 17:57:25,507 INFO sqoop.Sqoop: Running Sqoop version: 1.4.7 Enter password: 2025-06-16 17:57:32,492 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils at org.apache.sqoop.manager.MySQLManager.initOptionDefaults(MySQLManager.java:73) at org.apache.sqoop.manager.SqlManager.<init>(SqlManager.java:89) at com.cloudera.sqoop.manager.SqlManager.<init>(SqlManager.java:33) at org.apache.sqoop.manager.GenericJdbcManager.<init>(GenericJdbcManager.java:51) at com.cloudera.sqoop.manager.GenericJdbcManager.<init>(GenericJdbcManager.java:30) at org.apache.sqoop.manager.CatalogQueryManager.<init>(CatalogQueryManager.java:46) at com.cloudera.sqoop.manager.CatalogQueryManager.<init>(CatalogQueryManager.java:31) at org.apache.sqoop.manager.InformationSchemaManager.<init>(InformationSchemaManager.java:38) at com.cloudera.sqoop.manager.InformationSchemaManager.<init>(InformationSchemaManager.java:31) at org.apache.sqoop.manager.MySQLManager.<init>(MySQLManager.java:65) at org.apache.sqoop.manager.DefaultManagerFactory.accept(DefaultManagerFactory.java:67) at org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:184) at org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:272) at org.apache.sqoop.tool.ListDatabasesTool.run(ListDatabasesTool.java:44) at org.apache.sqoop.Sqoop.run(Sqoop.java:147) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:82) at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234) at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243) at org.apache.sqoop.Sqoop.main(Sqoop.java:252) Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 20 more
06-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值