Linux下如何从下载的源码创建Java包并导入使用?
解决Java包声明与commons-codec源码编译问题
咱们一步一步拆解你遇到的问题,其实是几个基础的Java语法和编译规则没搞对,很容易修正:
首先,你代码里的两个致命错误
package语句的位置完全错了
Java规定,package声明必须是文件的第一行有效代码(注释除外),绝对不能放在import语句后面。你现在把import java.util.*;写在package前面,编译器直接就会报语法错误。包名不能包含连字符(-)
Java的包名是合法标识符,只能用字母、数字、下划线和点号(.),commons-codec-1.11-src里的-是非法字符,这也是编译器指向package语句报错的核心原因之一。
正确的解决方案(分两种场景,选适合你的)
场景1:直接编译commons-codec源码并使用
commons-codec本身有规范的包结构(比如org.apache.commons.codec),你不需要自己给它声明包,只需要对齐目录结构:
- 打开
commons-codec-1.11-src,找到src/main/java目录,把里面的org文件夹整个复制到你的~/Documents/javapractice目录下。现在你的目录结构应该是:~/Documents/javapractice/ ├── org/ │ ├── apache/ │ │ ├── commons/ │ │ │ ├── codec/ │ │ │ │ ├── 所有commons-codec的Java源码文件 ├── File.java - 修正你的
File.java:把错误的package commons-codec-1.11-src;删掉,如果不需要自己的包,直接写正确的导入和类:import java.util.*; // 比如导入commons-codec的Base64类 import org.apache.commons.codec.binary.Base64; public class File { // 你的业务代码 public static void main(String[] args) { String encoded = Base64.encodeBase64String("test".getBytes()); System.out.println(encoded); } } - 执行编译命令(类路径指向你的javapractice目录,因为org包在这里):
javac -cp ~/Documents/javapractice ~/Documents/javapractice/File.java - 运行程序:
java -cp ~/Documents/javapractice File
场景2:更简单的方式——直接用预编译的Jar包
自己编译源码比较麻烦,推荐直接下载commons-codec的Jar包(比如commons-codec-1.11.jar),放到~/Documents/javapractice目录下:
- 修正你的
File.java(同样去掉错误的package语句):import java.util.*; import org.apache.commons.codec.binary.Base64; public class File { // 你的代码 } - 编译命令(把Jar包加到类路径):
javac -cp ~/Documents/javapractice/commons-codec-1.11.jar ~/Documents/javapractice/File.java - 运行命令(注意Linux下用冒号分隔多个类路径项):
java -cp ~/Documents/javapractice:~/Documents/javapractice/commons-codec-1.11.jar File
额外提醒
- 尽量不要用
File作为类名,Java标准库已经有java.io.File,容易混淆。 - 如果你的自己的类需要放在自定义包下,比如
package my.practice;,那必须把File.java放在~/Documents/javapractice/my/practice目录下,编译和运行时也要对应调整路径。
内容的提问来源于stack exchange,提问作者brad
相关产品推荐
相关产品推荐

