首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Java)正确使用命令行执行

(Java)正确使用命令行执行
EN

Stack Overflow用户
提问于 2014-04-28 07:09:17
回答 2查看 165关注 0票数 0

我正在学习一篇将java类连接到MySQL (http://zetcode.com/db/mysqljava/)的教程。我可以让代码在Eclipse中编译和运行,但是在尝试在命令行运行它时,我做了一些错误的事情。我正在使用OSX的终端btw。

我执行以下步骤来编译

代码语言:javascript
复制
cd dropbox/workspace/mysqltut/src/zetcode
javac Version.java

这将成功创建Version.class文件。

我的问题的简单版本是,如何从命令行运行此命令?下面详细介绍我尝试使用本教程显示的代码行以及我的变体,以便让类文件正常运行。

如果我尝试使用教程命令行运行它:java -cp .:lib/mysql-connector-java-5.1.30-bin.jar zetcode/Version.java,我得到Error: Could not find or load main class zetcode.Version

所以我想,哦,我已经在zetcode中了,所以我修改了它并使用了java -cp .:lib/mysql-connector-java-5.1.30-bin.jar Version.java,这一次我得到了以下结果:

代码语言:javascript
复制
Exception in thread "main" java.lang.NoClassDefFoundError: Version (wrong name: zetcode/Version)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

不确定wrong name: zetcode/Version是什么意思。我已经在zetcode里了。请记住,我找不到lib之前的开关.:是什么意思。我正要离开这个教程。因此,我尝试将该开关改为../,因为libzetcode更高一级(与src处于同一级别)。我又拿到Error: Could not find or load main class Version了。

我显然是在间接地处理执行的语法,因为它在IDE中运行得很好。提前做好准备。

哦,如果你需要源代码,我使用:

代码语言:javascript
复制
package zetcode;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Version {

    public static void main(String[] args) {

        Connection con = null;
        Statement st = null;
        ResultSet rs = null;

        String url = "jdbc:mysql://localhost:3306/";
        String user = "root";
        String password = "";

        try {
            con = DriverManager.getConnection(url, user, password);
            st = con.createStatement();
            rs = st.executeQuery("SELECT VERSION()");

            if (rs.next()) {
                System.out.println(rs.getString(1));
            }

        } catch (SQLException ex) {
            Logger lgr = Logger.getLogger(Version.class.getName());
            lgr.log(Level.SEVERE, ex.getMessage(), ex);

        } finally {
            try {
                if (rs != null) {
                    rs.close();
                }
                if (st != null) {
                    st.close();
                }
                if (con != null) {
                    con.close();
                }

            } catch (SQLException ex) {
                Logger lgr = Logger.getLogger(Version.class.getName());
                lgr.log(Level.WARNING, ex.getMessage(), ex);
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-04-28 17:14:25

在编译类之后从命令提示符运行时,请使用以下代码

代码语言:javascript
复制
java -classpath .;mysql-connector-java-5.0.8-bin.jar Version

将jar和java文件放在同一目录中,然后尝试。如果有的话,使用";“代替前面提到的":”above.include包名称。我已经测试过它的工作情况。

票数 0
EN

Stack Overflow用户

发布于 2014-06-27 05:40:45

您不应该从src目录编译源代码。编译应该从项目目录中完成。项目目录包含bin、src和lib目录。

Linux tree命令以树状格式列出我们项目目录。

代码语言:javascript
复制
$ tree
.
├── bin
│   └── zetcode
│       └── Version.class
├── lib
│   └── mysql-connector-java-5.1.31-bin.jar
└── src
    └── zetcode
        └── Version.java

二进制文件放入bin目录,库放入lib,源代码放入src目录。请注意,目录必须与包名称匹配。

为了编译源代码,我们使用以下命令:

$ javac -d bin src/zetcode/Version.java

使用-d选项,我们为创建的类文件设置目录。

以下命令执行该程序:

代码语言:javascript
复制
$ java -cp bin:lib/mysql-connector-java-5.1.31-bin.jar zetcode.Version 
5.5.37-0ubuntu0.14.04.1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23330160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档