最近在做一个和版权保护相关的项目,前面几篇博文也是和这个项目有关的。随着项目需求的不断完善,实现的方法也在逐步做小的修改。
昨天接到了需求是把我用C语言写的库封装一层java程序,把这个程序做成*jar包的形式,以供别人的程序调用。
博主在2007年接触过java,并且考取了java二级,不过经历了14年的低档,这些东西基本都忘记了。昨天又重新查找资料复习了一下java的知识。现在记录一下ubuntu下java调用自己做的*.jar包的注意事项。
1.首先在当前目录建立 com/baidu/ 子目录,并且在这个目录创建Demo.java程序
package com.baidu;
public class Demo
{
public String getInfo() {
return "Hello, world!!!";
}
}
2.在 com/baidu 目录下执行 javac Demo.java 命令结果是在 com/baidu 生成 Demo.class 文件
3.进入和 com 同级的目录
4.执行 jar cvf my.jar com 命令,对 com 文件夹打包
从命令的输出可以看到
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/baidu/(in = 0) (out= 0)(stored 0%)
adding: com/baidu/Demo.java(in = 100) (out= 94)(deflated 6%)
adding: com/baidu/Demo.class(in = 287) (out= 225)(deflated 21%)
这是压缩进 my.jar 的具体内容。
压缩完成之后我们看到在 learn_java 目录下多了一个 my.jar 文件。
5.进入 com/baidu 目录删除 Demo.class 文件(删除的目的是为了确定后面步骤中编译和运行其他程序用的是 my.jar)
6.然后返回 com 文件夹编写 TestDemo.jave 文件
import com.baidu.Demo;
public class TestDemo
{
public static void main(String[] args)
{
Demo demo = new Demo();
System.out.println(demo.getInfo());
}
}
在 TestDemo.java 文件的首行我们导入了 com.baidu.Demo 类。
7.执行 javac -cp my.jar TestDemo.java 命令引用 my.jar 包一起编译 TestDemo.java 文件
我们看到命令执行之后,在同级目录下生成了 TestDemo.class 文件。
8.执行 set classpath my.jar 设置环境变量,把 my.jar 放进 classpath 里,然后再次调用 javac TestDemo.java 命令编译 TestDemo.java 程序
9.执行 java TestDemo 命令进行测试
从输出我们看到执行了 my.jar 里的方法。
注:
我们看到第七步用了 -cp 参数编译 my.jar 和 TestDemo.java ,这样编译也确实生成了 TestDemo.class,但是当我们执行 java -cp my.jar TestDemo 命令时,却报错不能产生正确的输出
所以我们采用了第 8,9 步的方式来调用的 my.jar 包,并且出现了期望中的结果。
本篇文章参考:https://jingyan.baidu.com/article/ceb9fb10c219a18cac2ba07c.html