Can't run java application with .jar dependancy - 'Error: Could not find or load main class'

Can't run java application with .jar dependancy - 'Error: Could not find or load main class'

所以我的代码 运行 在我的 IDE 中很好并且我将 javax.mail.jar 设置为依赖项并且我的代码 运行 很好。

除非我需要使用 Console console = System.console(); 这在 IDE 的

中不起作用

所以我正在尝试编译我的代码并通过终端 运行 它,我可以编译,尽管当 运行 编译我的代码时它 returns 错误:

Error: Could not find or load main class Main

这是我编译的内容:

javac -cp "./javax.mail.jar" Main.java

然后去运行吧:

java -cp "./javax.mail.jar" Main

但我收到错误:无法找到或加载 main class Main

这是我的完整代码:

package com.company;

import java.io.IOException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class Main {
public static void main(String[] args) throws IOException {


    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("TestEmail@gmail.com","pass");
                }
            });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("TestEmail@gmail.com"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("TestEmail@gmail.com"));
        message.setSubject("JavaMail");
        message.setText("Hi," + "\n\n This is a test");

        Transport.send(message);

        System.out.println("Sent!");


    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
}


}

编辑: 还尝试从父目录 运行ning(这有我的 com 文件夹和 java.mail.jar):

java -cp "./javax.mail.jar;." com.company.Main

但我明白了:

Error: Could not find or load main class com.company.Main

你应该从 com 的父文件夹编译它,通过:

javac -cp "./javax.mail.jar:." com/company/Main.java

然后 运行 通过

java -cp "./javax.mail.jar:." com.company.Main
java -cp ".;./javax.mail.jar" com.company.Main

您可以使用 [java.util.Scanner][1]

[1]: https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html class 接受来自控制台而不是控制台的输入,这在 IDE 中没有用。

其他 post 已经回答了如何从命令行编译文件而不添加重复的细节。