您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页用命令编译运行打包java源代码

用命令编译运行打包java源代码

来源:华佗小知识


例1:D盘的java_src/pro文件夹下有文件夹classes和src,src下的文件夹为org/xalg,其中xalg下又有两个文件夹,分别为good和test。在good文件夹下有一个源代码文件为Good.java,其内空为

在test文件夹下,有一个源代码文件为HelloWorld.java,内容为

文件结构图如下:

因为HelloWorld.java引用了Good.java,所以要先编译Good,在pro目录下执行

javac -d classes src\\org\\xalg\\good\\Good.java

-d classes和Good.java源代码中的包名共同组成了Good.class生成的位置,可以发现在classes文件夹上生成了org\\xalg\\good\\Good.class

再编译HelloWorld.java,在pro下执行

javac -d classes -cp classes src\\org\\xalg\est\\HelloWorld.java

-d classes和HelloWorld.java源代码中的包名共同组成了HelloWorld.class生成的位置,可以发现在classes文件夹上生成了org\\xalg\est\\HelloWorld.java。-cp classes指定了编译HelloWorld.java时要引用的Good.class的位置,因为刚才的Good.class生成到了classes中,故写成-cp classes

编译完毕,执行命令为:

java -cp classes org.xalg.test.HelloWorld

-cp指定了运行此程序要用到的所有字节码(.calss)文件的位置,而org.xalg.test.HelloWorld指的是含有main()函数的字节码是org.xalg.test.HelloWorld,编译运行的截图如下:

将程序打包成jar包要先写的一个文本文件,指示main()函数所在类,如下

注意冒号后面要有一个空格,HelloWorld后面不能有空格,最后要以空行结束。将文本文件Manifest.txt放在例1中的classes文件夹下(和包org在同一个目录),如下图

在文件夹classes下执行

jar cfm combine.jar Manifest.txt org\\xalg\\good\\Good.class org\\xalg\est\\HelloWorld.class

其中cfm中的c意思是创建新的压缩文件, cfm中的f意思是指定压缩文件的名称,cfm中的m意思是包含指定清单文件中的清单信息,就是指的Manifest.txt中的信息,整个命令的意思是将Good.class和HelloWorld.class打包成combine.jar,在Manifest.txt中指定了main()函数所在的类.

运行此jar包,执行命令:

java -jar combine.jar

运行命令的截屏为:

例2 :引用已有的jar包,并且再次打包成一个jar包。现在如下结构的文件夹,

文件夹classes为空,文件夹jar里面有一个连接mysql需要的jar包,mysql-connector-java-5.1.18-bin.jar,src文件夹下有文件夹org\\xalg\\conn,conn下有一个连接mysql的源代码JDBCMysql.java,内容为

package org.xalg.conn;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class JDBCMysql {

public static void main(String[] args) {

try {

Class.forName(\"com.mysql.jdbc.Driver\");

} catch (ClassNotFoundException ex) {

ex.printStackTrace();

}

Connection conn = null;

Statement stmt = null;

ResultSet rs = null;

try {

conn = DriverManager

.getConnection(

\"jdbc:mysql://localhost:3306/cover?useUnicode=true&characterEncoding=UTF-8\

\"root\

stmt = conn.createStatement();

stmt.executeUpdate(\"insert into StuTable(StuNum, StuName, StuMark)values ('3','a1234',20)\");

rs = stmt.executeQuery(\"select * from StuTable\");

while (rs.next()) {

System.out.println(\"StuNum=\" + rs.getInt(\"StuNum\"));

System.out.println(\"StuName=\" + rs.getString(\"StuName\"));

System.out.println(\"StuMark=\" + rs.getInt(\"StuMark\"));

}

} catch (Exception ex) {

ex.printStackTrace();

} finally {

try {

if (rs != null) {

rs.close();

}

if (conn != null) {

conn.close();

}

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

}

进入test4对其编译,执行:

D:\est4\\classes>javac -d classes -cp jar\\mysql-connector-java-5.1.18-bin.jar src\\org\\xalg\\conn\\JDBCMysql.java

-d classes作用见例1,编译时要引用jar包,-cp

jar\\mysql-connector-java-5.1.18-bin.jar就指定了jar包.

运行时执行命令:

D:\est4>java -cp classes;jar\\mysql-connector-java-5.1.18-bin.jar

org.xalg.conn.JDBCMysql

其中-cp 后的classes;jar\\mysql-connector-java-5.1.18-bin.jar指定了运行此程序要用到的.class文件(.jar是打包后的.calss文件),org.xalg.conn.JDBCMysql指定了main函数所在的.class文件,命令截屏为

例3.打包已有的jar包

接上面的例子,将mysql-connector-java-5.1.18-bin.jar复制到calsses文件夹下,在classes文件夹下建文件文件Manifest.txt,内容如下

注意每个冒号后面要跟一个空格,每行最后不能有空格,文件最后要以空行结束。

编译,运行命令jar cfm MyJar.jar Manifest.txt org\\xalg\\conn\\JDBCMysql.class

执行,运行命令java -jar MyJar.jar

命令截图为:

点击这里进入源代码下载页面.

参考资料:

1. Java programming package classpath

2. Oracle官方教程(配制部分)

有问题可以联系zhouyang209117@sina.com

2012年11月13日

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务