无法运行具有 .jar 依赖项的 java 应用程序 - 错误:无法找到或加载主类

问题描述 投票:0回答:3

我的代码在 IDE 中运行良好,并且我将

javax.mail.jar
设置为依赖项,并且我的代码运行良好。

除了,我需要使用

Console console = System.console();
这在 IDE 中不起作用。

所以,我正在尝试编译我的代码并通过终端运行它。我可以编译,但是在运行我的代码时它返回错误:

错误:无法找到或加载主类

Main

这就是我编译的内容:

javac -cp“./javax.mail.jar”Main.java

然后运行它:

java -cp“./javax.mail.jar”主要

但我收到错误:

Could not find or load 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("[email protected]","pass");
                }
            });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("[email protected]"));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
        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);
    }
}


}

编辑:

另外,我尝试从父目录运行(其中有我的 com 文件夹和

java.mail.jar
):

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

但我明白了:

错误:无法找到或加载主类

com.company.Main

java command-line jar classpath
3个回答
2
投票

您应该从 com 的父文件夹编译它,方法是:

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

然后跑过去

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

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

-1
投票

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

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

其他帖子已经回答了如何从命令行编译文件,因此不添加重复的详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.