我在eclipse中创建了一个简单的maven项目,以便用一个个人gmail帐户发送一些电子邮件。在日食中,邮件被成功发送。然后,我将项目构建到一个带有依赖项的可执行jar中。但是,当我从命令行运行jar时,它会引发以下异常:
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中执行程序和在外部执行jar有什么区别吗?非常感谢!
发布于 2013-12-23 20:30:44
我通过修改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>发布于 2013-12-22 22:46:00
您应该在META文件夹中有一个包含所有提供程序文件的服务文件夹,并且应该将它们导出到jar。默认情况下,eclipse包括它们,但是导出的jar不是
https://stackoverflow.com/questions/20733913
复制相似问题