2013-12-22 3 views
0

Я создал простой проект maven в eclipse, чтобы отправить несколько писем с помощью одной личной учетной записи gmail. В eclipse почта была успешно отправлена. Затем я построил проект в исполняемую банку с зависимостями. Однако, когда я бегу баночку из командной строки, он выдает следующее исключение:NoSuchProviderException для java mail api

Exception in thread "main" java.lang.RuntimeException: javax.mail.NoSuchProviderException: smtp 
    at EmailSender.send(EmailSender.java:75) 
    at EmailSender.createNewAccount(EmailSender.java:33) 
    at EmailSender.main(EmailSender.java:18) 
Caused by: javax.mail.NoSuchProviderException: smtp 
    at javax.mail.Session.getService(Session.java:792) 
    at javax.mail.Session.getTransport(Session.java:728) 
    at javax.mail.Session.getTransport(Session.java:668) 
    at javax.mail.Session.getTransport(Session.java:648) 
    at javax.mail.Session.getTransport(Session.java:705) 
    at javax.mail.Transport.send0(Transport.java:248) 
    at javax.mail.Transport.send(Transport.java:124) 
    at EmailSender.send(EmailSender.java:73) 
    ... 2 more 

Кто-нибудь знает, что разница между выполнением программы внутри Eclipse, и сосуд снаружи? Большое спасибо!

ответ

0

Я решил проблему, изменив pom.xml, чтобы он мог экспортировать все зависимости. Хитрость заключается в том, чтобы удалить строку

<minimizeJar>true</minimizeJar> 

в следующем коде

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>*******</groupId> 
    <artifactId>**********</artifactId> 
    <version>1</version> 
    <dependencies> 
     <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>mail</artifactId> 
      <version>1.5.0-b01</version> 
     </dependency> 
     <dependency> 
      <groupId>javaee</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>5</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>1.6</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/shaded</outputDirectory> 
          <finalName>d2si-mailsender</finalName> 
          <minimizeJar>true</minimizeJar> 
          <transformers> 
           <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
            <mainClass>EmailSender</mainClass> 
           </transformer> 
          </transformers> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 
0

у вас должна быть папка служб в вашей папке META-INF со всеми файлами провайдера, и вы также должны экспортировать их в банку. eclipse включает их по умолчанию, но экспортированная банка не

+1

Ровно. См. Также [this] (http://stackoverflow.com/questions/20704125/read-gmail-inbox-using-javamail-works-in-eclipse-but-not-outside), что, вероятно, является одной и той же основной проблемой. –

Смежные вопросы