2017-03-06 9 views
0

私のコードがIDEでうまく動作し、javax.mail.jarが依存関係にあり、コードがうまく動作します。Javaアプリケーションを.jar依存関係で実行できません - 'エラー:メインクラスを見つけられないか読み込めませんでした'

私はConsole console = System.console(); を使用すると、これはだから私は私のコードをコンパイルし、端子を介してそれを実行しようとしていますIDEの

内で動作しません必要な場合を除き、私のコードを実行しているとき、それはエラーを返しますが、私がコンパイルできます。

Error: Could not find or load main class 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

しかし、私はこれを取得:

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

+0

'java -cp ./javax.mail.jar :. Main'以外の場合、Mainが存在するディレクトリはクラスパスにないため、エラーになります。クラスファイルをjarファイルと同じディレクトリに格納するのは悪い考えです。デフォルトのパッケージを使用することも悪い考えです。 –

答えて

2

は、次の方法で、COMの親フォルダからそれをコンパイルしなければならない。

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

そして、このことができます

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

希望によって実行されます。

+0

コマンドのjarの名前が実際のjarと一致することを確認してください – Sanjeev

+1

oopsは編集済みの回答を見てください。macのクラスパスに ';'を入れてください。 – Sanjeev

+0

My savior !!ありがとうございましたso much so – Jack

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

乾杯:)とても役に立ちました – Jack

-1

あなたは[java.util.Scanner]を使用することができます[1]

[1]:https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.htmlクラスは、IDEのに有用ではない代わりに、コンソールのコンソールからの入力を受け付けます。

他の投稿は、すでにコマンドラインからファイルをコンパイルする方法に重複した詳細を追加しないように答えています。

関連する問題