我正在尝试从 JakartaMail 1.6.5 迁移到 2.0.1,当我开始我的应用程序时,我得到了
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1364)
Run Code Online (Sandbox Code Playgroud)
我也尝试改变:
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
Run Code Online (Sandbox Code Playgroud)
到
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
Run Code Online (Sandbox Code Playgroud)
但是,当我使用JavaMailSenderImpl mailSenderSpring 类时,例如:
MimeMessage message = mailSender.createMimeMessage();
Run Code Online (Sandbox Code Playgroud)
它说:
Required type:
jakarta.mail.internet.MimeMessage
Provided:
javax.mail.internet.MimeMessage
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?Spring 支持 JakartaMail 2.0.1 吗?因为JavaMailSender处于spring-context-support中(我使用版本5.3.9)
我正在开发一个旧的java程序,其中包含一个带有Fortran调用的本机库.
所以,我有Java通过JNI调用C,然后调用Fortran.
在生产中,我们有一个内存不足的错误,如:
Native memory allocation (malloc) failed to allocate 120000 bytes for jfloat in C:\BUILD_AREA\jdk6_37\hotspot\src\share\vm\prims\jni.cpp
Run Code Online (Sandbox Code Playgroud)
我怀疑是内存泄漏.
我是公司的新手,我想在linux上工作,但他们让我在Windows上工作:(在生产中我们使用.so文件,因为我们在solaris上,我在Windows上使用DLL(逻辑上).
首先,我试图重现生产问题.因此,我创建了一个单元测试,它加载DLL并调用多次调用本机方法的java类.当我这样做时,我看到processExplorer.exe,内存每2秒增长到2MB.我在生产中也有例外.
我很高兴我成功地重现了这个问题,我可以说问题来自C或Fortran Code.
接下来,我尝试删除对Fortran的调用,我的java只调用C(没有Fortran,这个测试允许我查看问题是来自C还是Fortran.)
结果是记忆没有移动!凉!我可以说我对C中的malloc/free没有任何问题.
所以,我决定学习一点Fortran来查看代码.:)
我了解到在Fortran中我们可以使用allocate和deallocate关键字来玩内存.我的代码不包含这些关键字.:(
在所有这些之后,有人让我访问Solaris以启动我的junit测试,该测试调用Java-> JNI-> C => Fortran并使用.so而不是DLL.
而且意外 - 记忆没动!我在Solaris或RedHat下没有任何问题.
我被困了,因为生产中存在问题,但我无法清楚地重现它.:(
为什么我看到DLL和SO之间的区别?代码(java/C/Fortran)完全相同,因为编译它的是我.
我该如何调查更多?
我试图在Windows下进行内存转储,我重现了这个问题,但我什么也没看到.
是jvm中的问题吗?或者问题可能在通过JNI传递给C的对象中?
非常感谢帮助我解决这个问题.
信息:我使用的是Windows 7 64位
PS:我是法国人,请原谅我的英语.我每次都尽力做到最好.;)
这是C代码的标题:
#ifndef unix
__MINGW_IMPORT void modlin_OM(float pmt[], float abaque[][], float don[][], float cond[], float res[][], int flag[]) ;
#else
extern void modlin_om_(float * pmt, float * abaque, float * don, float * cond, float * res, int …Run Code Online (Sandbox Code Playgroud) 我遇到了mockito.spy方法的问题.
我最近到了一个"旧"项目,我的第一个任务是在其中添加mockito,并进行真正的单元测试:)
该项目存在许多概念问题,但这不是重点;)
我解释一下我的问题:
我上课了
public class Tutu{
public Tutu(){
}
}
public class Toto{
public Toto(){
}
public int executeToto(Tutu tutu){
//do some stuff
return 5;
}
}
public class Titi{
private Toto toto;
public Titi(){
this.toto = new Toto();
}
public void executeTiti(){
//do some stuff
Tutu tutu = new Tutu();
int ret = this.toto.executeToto(tutu);
//do some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在我的测试类TitiTest.java中我想只测试executeTiti,我不想测试executeToto的东西,因为这个类有自己的测试类TotoTest.java.
但正如你所看到的,toto是在titi构造函数中实例化的,所以我尝试这样的事情:(我也在我的测试中使用PowerMock,所以我使用的是PowerMockRunner,但它似乎不是问题)
@RunWith(PowerMockRunner.class)
public class TitiTest {
@Test
public void testExecuteTiti(){
Toto toto = Mockito.spy(new Toto());
Mockito.doReturn(2).when(toto).executeToto(Mockito.any(Tutu.class));
Titi …Run Code Online (Sandbox Code Playgroud) 我正在升级仅包含用JAVA编写的集成测试的项目。
现在我们要编写单元测试,所以我决定创建src / it / java文件夹以放置所有现有测试,并在src / test / java中编写新的单元测试
我使用surfire和build-helper来做到这一点。
在命令行中我可以运行
mvn全新安装,仅读取src / test / java目录进行测试
我在做什么
mvn -Pintegration-test全新安装,我看到已读取src / it / java中的测试以进行测试
因此所有命令都可以在命令行中正常运行。
现在,我想在eclipe上导入我的项目。当我这样做时,只有src / test / java用作源文件夹。如何设置pom.xml以将src / test / java和src / it / java作为源文件夹?
**这是我的构建器插件配置
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>process-resources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/it/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
非常感谢!
java ×4
eclipse ×1
fortran ×1
jakarta-mail ×1
maven ×1
memory ×1
memory-leaks ×1
mocking ×1
mockito ×1
spy ×1