平时都是在eclipse或者IntelliJ IDEA等IDE中运行java程序。突然有一天,需要将程序打包运行!怎么办呢?今天就给大家分享一下。
首先,我们看一下示例小程序的整体结构:
小程序很简单吧,注意看三个额外的依赖jar包,后面要提及的。
接下来,简单地看一下代码:
log4j.rootLogger = debug,stdout,D,E
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
drivername=com.mysql.jdbc.Driver
dburl=jdbc:mysql://node3.quantumsec.cn:3306/mydatabase?zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=UTF-8&characterSetResults=UTF-8
username=root
password=hadoop123
package com.metron.database;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBConnection {
public static Connection conn = null;
public static String driverClass = "";
public static String dbURL = "";
public static String dbUser = "";
public static String dbPwd = "";
static {
loadProperty();
}
public static boolean loadProperty() {
Properties properties = new Properties();
try {
properties.load(DBConnection.class.getResourceAsStream("db.properties"));
driverClass = properties.getProperty("drivername");
dbURL = properties.getProperty("dburl");
dbUser = properties.getProperty("username");
dbPwd = properties.getProperty("password");
} catch (IOException e) {
return false;
}
return true;
}
public static void openConn() {
try {
Class.forName(driverClass).newInstance();
conn = DriverManager.getConnection(dbURL, dbUser, dbPwd);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException | SQLException e) {
return;
}
}
public static void closeConn() {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
public static void closeStatement(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
}
public static void closeResultSet(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
}
}
package com.metron.database;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "name : " + this.name + " , age : " + this.age;
}
}
package com.metron.database;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MainTest {
private static Logger _LOG = LoggerFactory.getLogger(MainTest.class);
public static void main(String[] args) throws IOException {
Person person = new Person();
if (DBConnection.conn == null) {
DBConnection.openConn();
}
_LOG.info("url : " + DBConnection.dbURL);
_LOG.info("usr : " + DBConnection.dbUser);
_LOG.info("pwd : " + DBConnection.dbPwd);
try {
String sql = "select * from person";
PreparedStatement ps = DBConnection.conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
person.setName(rs.getString("name"));
person.setAge(rs.getInt("age"));
_LOG.info(person.toString());
}
DBConnection.closeResultSet(rs);
DBConnection.closeStatement(ps);
DBConnection.closeConn();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
确定代码没有问题,我们就可以打包了:
到这里,程序还是不能直接运行的,因为我们的依赖包是没有包含进来。下面添加依赖包。在jar文件里边的META-INF目录下,有一个名为MANIFEST.MF的文件,我们打开它,添加下面一句话:
Class-Path: lib/mysql-connector-java-5.1.37-bin.jar lib/slf4j-api-1.7.7.jar lib/slf4j-simple-1.7.1.jar
好了,依赖包确实配置好了,可是包放在哪里呢?是这样的:我们在刚才的程序包–MysqlConnTestDemo.jar的统计目录下创建一个名为“lib”的文件夹,然后将依赖的jar包放进去就可以了。
接下来,就可以运行程序了。