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 已经回答了如何从命令行编译文件而不添加重复的细节。
所以我的代码 运行 在我的 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 已经回答了如何从命令行编译文件而不添加重复的细节。