我的代码在 IDE 中运行良好,并且我将
javax.mail.jar
设置为依赖项,并且我的代码运行良好。
除了,我需要使用
Console console = System.console();
这在 IDE 中不起作用。
所以,我正在尝试编译我的代码并通过终端运行它。我可以编译,但是在运行我的代码时它返回错误:
错误:无法找到或加载主类
Main
这就是我编译的内容:
javac -cp“./javax.mail.jar”Main.java
然后运行它:
java -cp“./javax.mail.jar”主要
但是,我收到错误:
无法找到或加载主类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
您应该从 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 类接受来自控制台的输入,而不是 Console,这在 IDE 中没有用。
其他帖子已经回答了如何从命令行编译文件,因此不添加重复的详细信息。