无法初始化 plugin: interface org.modito.plugins. MockMaker

一旦测试开始,我就会遇到以下异常:

    Testcase: treeCtorArgumentTest(com.xythos.client.drive.cachedtree.CachedTreeTest):  Caused an ERROR
Could not initialize plugin: interface org.mockito.plugins.MockMaker
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker
at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66)
at com.sun.proxy.$Proxy7.isTypeMockable(Unknown Source)
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:168)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:162)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:64)
at org.mockito.Mockito.mock(Mockito.java:1687)
at org.mockito.Mockito.mock(Mockito.java:1600)
at com.xythos.client.drive.cachedtree.CachedTreeTest.setUp(CachedTreeTest.java:51)
Caused by: java.lang.NoClassDefFoundError: net/bytebuddy/dynamic/loading/ClassLoadingStrategy
at org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.<init>(SubclassByteBuddyMockMaker.java:33)
at org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.<init>(ByteBuddyMockMaker.java:22)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:54)
at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:18)
at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:17)
at org.mockito.internal.util.MockUtil.<clinit>(MockUtil.java:24)
Caused by: java.lang.ClassNotFoundException: net.bytebuddy.dynamic.loading.ClassLoadingStrategy
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

这是我的测试:

package com.xythos.client.drive.cachedtree;


import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;


@RunWith(MockitoJUnitRunner.class)


public class CachedTreeTest {


public CachedTreeTest() {
}


@Test
public void treeCtorArgumentTest() {
somemock m = mock(SomeClass.class);
}
}

我正在使用 NetBeans 8.2。我已经下载了 modito-core-2.7.0.Jar,然后我选择“ Test Library”-> “ Add Jar”并添加了 modito-core-2.7.0.Jar。

类路径和一切正常,我,仍然得到异常。

有什么建议吗?

178192 次浏览

没有提到:

  • Byte-Buddy-1.6.5. jar
  • Byte-Buddy-agent-1.6.5. jar
  • Objecenesis-2.5. jar

从 Mockito 2.0.2 beta 版开始,Mockito-core 就有依赖关系。

我在类路径上有 Byte Buddy (是 Mockito 2.8.9的传递深度) ,但仍然得到了异常。原因是我用 JRE 而不是 JDK 运行单元测试。切换到 JDK 对我来说很有效。

我有同样的问题-同样的堆栈跟踪出现在我的日志。这是典型的问题与项目设置... OR
如果没有正确下载 bytebuddyJAR,那么问题可能出现在这些 JAR 中。 < br/> 当我试图手动检查 ClassLoadingStrategy 类时,我得到了 什么都没有错误。

在这种情况下,手动删除本地 maven 目录中的 Byte Buddy 就足够了,通常位于:
{ home }/. m2/itory/net/byteBuddy/

下一次尝试运行项目或测试,他们将再次下载,应该按预期工作。

不幸的是,当类或 jar 丢失以及 jar 损坏时,常见的 Java类加载器也会以同样的方式出现。

如果您正在使用 powermock,请确保您的依赖关系指向:

org.powermock:powermock-api-mockito2

而不是

org.powermock:powermock-api-mockito

在我的例子中,一些异常的 env 设置也会导致这个错误:

在 ubuntu 16.04中,java 和 javac 已经被更新了——可以替代7 但是 $JAVA _ HOME 被错误地设置为8

我删除 $JAVA _ HOME,一切恢复正常

当切换到 爪哇10和 SpringBoot2时,我也有同样的例外。 这种依赖关系的组合对我很有效:

    <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>2.0.2-beta</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.8.16</version>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>1.8.16</version>
<scope>test</scope>
</dependency>

为此添加一个 bnd 方面

如果使用的是 cnf maven 存储库(比如我的 cnf/central.mvn) ,那么添加到 帕斯卡斯的回答之后,还必须包含 cnf maven 存储库中的依赖项。

org.mockito:mockito-core:2.21.0
net.bytebuddy:byte-buddy:1.8.15
net.bytebuddy:byte-buddy-agent:1.8.15
org.objenesis:objenesis:2.6

为了方便引用,您可以在 cnf/build.bnd中包含一个 bnd 变量

mockito: org.mockito:mockito-core; version=2.21.0,\
net.bytebuddy:byte-buddy; version=1.8.15,\
net.bytebuddy:byte-buddy-agent; version=1.8.15,\
org.objenesis:objenesis; version=2.6

和你的项目的 bnd 文件

-testpath:\
${mockito}

我在一个现有的项目中遇到过同样的问题。 我使用的是 java8,另外还安装了 java10。 所以我开始得到这个例外。 我卸载了 java 10,它没有帮助。 我删除字节好友罐从马文回购,它没有帮助。 只有在完全删除所有罐子从马文回购我可以再次编译项目。

删除版本声明对我有效:

例如:

    <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.8.9</version>
<scope>test</scope>
</dependency>

删除2.8.9

之后:

    <dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>

这可能是由于这个依赖项的 jar 包之间的版本问题。

这不是原始海报的答案,因为他/她正在使用 Netbeans,但是在 Eclipse 中,我需要做“ Maven-> Update Project”来让测试再次工作。

我也遇到了同样的问题,并尝试了@Paskas 的解决方案,起初运行得很好。 在 pom.xml 中添加了字节伙伴依赖项:

<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-dep</artifactId>
<version>1.9.7</version>
</dependency>

希望这个能帮上忙。

如果启用了模拟最终类的选项,Mockito2就会出现这个问题。

这意味着在 测试/资源/仿真扩展目录中 您有一个名为 Org Mocito plugins MockMaker的文件,其中包含 以下内容 模拟制造者内联

在这种情况下,byte-Buddy (模仿核心的一个传递依赖项)会遇到将自己的代理附加到 java 进程的问题。但是只有在使用 JRE 时才会出现问题。

解决办法是:

  • 使用 JDK 代替 JRE

或者

  • 添加 -javaagent:byte-buddy-agent-*.jar作为 VM 选项

我遇到了这个问题,并通过将我的 Org Mocito Mocito-core版本改为最新版本来解决这个问题。我使用旧版本已经有一段时间了。

只需更新到最新版本的 org.mockito:mockito-core。一旦我这样做,错误消失了!

在我的例子中,我正在从事一个不使用 maven 构建系统的项目。这就是我的办法。

注意: (创建库是可选的,您可以直接将 jar 添加到您的项目构建路径中)

希望这对谁有帮助。

从出现在错误中的 maven 存储库路径手动删除“ byte-Buddy-1.7.11. jar”。马文更新项目和问题将得到解决。努力为我工作。

问题: PowerMock + Mockito + TestNG + PowerMockTestCase

分享我的问题/解决方案,以免对任何人有帮助。

我的依赖关系都指向正确的方向:

testImplementation 'org.mockito:mockito-core:2.8.47'
testImplementation 'org.powermock:powermock-core:1.7.4'
testImplementation 'org.powermock:powermock-module-testng:1.7.4'
testImplementation 'org.powermock:powermock-api-mockito2:1.7.4'

但我还是得到了以下错误:

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker


at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:66)
at com.sun.proxy.$Proxy11.isTypeMockable(Unknown Source)
at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:29)
at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:22)
at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:186)
at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:180)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:62)
at org.mockito.Mockito.mock(Mockito.java:1729)
at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:33)
at org.mockito.internal.configuration.MockAnnotationProcessor.process(MockAnnotationProcessor.java:16)
at org.mockito.internal.configuration.IndependentAnnotationEngine.createMockFor(IndependentAnnotationEngine.java:38)
at org.mockito.internal.configuration.IndependentAnnotationEngine.process(IndependentAnnotationEngine.java:62)
at org.mockito.internal.configuration.InjectingAnnotationEngine.processIndependentAnnotations(InjectingAnnotationEngine.java:57)
at org.mockito.internal.configuration.InjectingAnnotationEngine.process(InjectingAnnotationEngine.java:41)
at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:69)

我的测试是这样的:

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import static org.mockito.MockitoAnnotations.initMocks;


@PrepareForTest(MyClass.class)
public class MyTest extends PowerMockTestCase {


@BeforeTest
public void init() {
initMocks(this);
}
}

正如在此线程中提到的,删除 initMocks()方法可以删除错误,但是所有模拟都将变为 null。


解决方案: 事先测试 VS 事先方法

在我的案子中,我发现 @BeforeTest实际上提出了一个问题。 将其更改为 @BeforeMethod解决了错误。

import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.testng.PowerMockTestCase;
import static org.mockito.MockitoAnnotations.initMocks;


@PrepareForTest(MyClass.class)
public class MyTest extends PowerMockTestCase {


@BeforeMethod // CHANGE THIS!
public void init() {
initMocks(this);
}
}

我的猜测是,这与豆类注射剂有关; 在注入 bean 之前执行 @BeforeTest,而在注入 bean 之后执行 @BeforeMethod。但不知道它到底是怎么影响的。

Mockito 2需要依赖关系。添加下面的两个 ByteBuddy 依赖关系。为我解决了这个问题:

  • Byte-Buddy-x.x. xx.jar
  • Byte-Buddy-agent-x.x. xx.jar

在我的例子中,我在项目中包含 jar 文件,可以在以下地址找到: Https://bintray.com/raphw/maven/bytebuddy/

如果 Maven 项目需要它,只需添加:

<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.9.14</version>
<type>pom</type>
</dependency>

我通过删除 Maven 的 POM XML 中的 Jmocit来解决这个问题。

    <dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>1.41</version>
<scope>test</scope>
</dependency>

通过这种依赖关系,我总是会得到这样的错误:

java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
...


Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)
...


Caused by: com.sun.tools.attach.AttachNotSupportedException: no providers installed
...

对我来说,问题在于 IntelliJ 将测试作为集成测试运行。所以我需要手动创建 JUnit 测试

enter image description here

在我的情况下,删除 mockito-core后,测试工作!

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>

我的版本在这里,JDK 是1.8.0 _ 121。

<properties>
<powermock.version>2.0.7</powermock.version>
<mockito.version>2.8.9</mockito.version>
</properties>

现在我的依赖对象是:

  • PowerMock-api-Mocito2
  • Powermock-module-junit4

对于 android 开发,你需要导入一些东西:

 dependencies {
testCompile "org.mockito:mockito-core:+"
androidTestCompile "org.mockito:mockito-android:+"
}

找不到这方面的任何参考,但这是唯一的一个为我工作。

在我从 ${ home } . m2存储库中删除 byteBuddy 文件夹,从 pom.xml 中删除 byte-Buddy-agent、 byte-Buddy 和 objecenesis 依赖关系之后,它对我很有用

我也遇到过同样的问题,通过在存储库和模仿依赖中添加 jcenter 解决了这个问题。

repositories {
jcenter()
}
dependencies {
testImplementation 'org.mockito:mockito-core:3.7.7'
testImplementation 'org.powermock:powermock-core:1.7.4'
testImplementation 'org.powermock:powermock-module-testng:1.7.4'
testImplementation 'org.powermock:powermock-api-mockito2:1.7.4'
}
    androidTestImplementation 'org.mockito:mockito-core:2.19.0'
testImplementation "org.mockito:mockito-core:2.19.0"//game changer for your question

这第二行是游戏改变者,android 测试实现和测试实现不是同一个测试集(android 测试实现是物理设备或模拟器的测试集) ..。 你可能对其中一个有依赖性并且编写代码,但是如果你运行不同的测试(在没有模拟器的 android 工作室中的本地测试) ,它将会失败(除非。.:)

测试愉快

就我而言,移除:

{home}/.m2/repository/org/robolectric/

解决了这个问题。下次运行时,它将再次下载这些文件。

经过大量研究,对我来说解决方案非常简单:

将 Mockito lib 版本更新为最新版本

dependencies {
testImplementation 'org.mockito:mockito-core:3.10.0'
androidTestImplementation 'org.mockito:mockito-android:3.10.0'
}
  • PowerMock 在第一步声纳无法工作,问题的原因是 PowerMock 和 Jacoco 的结合
  • 我们不会在本地面对这个问题,但是如果我们使用声纳进行测试覆盖计算,错误如下
Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)
  • 在 PowerMock 2.0.9版本中,为了解决这个问题,他们添加了一个注释 @PrepareOnlyThisForTest,这提供了隔离特定 Test 类的能力。
  • 除此之外,我们需要使用 @PowerMockRunnerDelegate(SpringRunner.class)将 Runner 委托给 SpringRunner

在 pom.xml 中添加 Power Mock 依赖项

        <dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>

使用 PowerMock Junit Runner 来测试 Class 并声明我们正在模仿的测试类,然后委托 SpringRunner

    @RunWith(PowerMockRunner.class)
@PrepareOnlyThisForTest(ServiceApplication.class)
@PowerMockRunnerDelegate(SpringRunner.class)
public class ExampleControllerTest {
PowerMockito.mockStatic(ServiceApplication.class);
Mockito.when(ServiceApplication.getStatic()).thenReturn("");

我也有同样的问题,终于解决了。

这是一个很长的答案,但是如果你在这个问题上挣扎了一段时间,希望这个能帮到你。


这是我的设想。

Android 单元测试

依赖性

- > org.mockito:mockito-core()

- > org.powermock:powermock-api-mockito2(模拟静态类)

- > mockito-inline(启用最终类模拟)

- > com.nhaarman.mockitokotlin2:mockito-kotlin


根本原因-> 检查错误日志

错过了 Issue1-> Tools.jar 依赖项

为了使用 mock-maker-inline (mock ito-inline) ,它具有依赖关系 我们需要依赖项。

这是 链接

我的错误日志如下所示

java.lang.RuntimeException: Invoking the beforeTestMethod method on PowerMock test listener org.powermock.api.extension.listener.AnnotationEnabler@49a4bf9a failed.


...


Caused by:
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)


...


Caused by:
java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@3d529098


...


Caused by:
java.lang.reflect.InvocationTargetException


...


Caused by:
org.mockito.exceptions.base.MockitoInitializationException:
Could not initialize inline Byte Buddy mock maker.
...


Caused by:
java.lang.NullPointerException
at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:182)


可以看到最后一行说 attachProvider抛出 NullPointerException,这个 attachProvider存在于 tools.jar 中

类路径是 com.sun.tools.attach.AttachProvider

因此,我们需要为 tools.jar添加依赖项


Issue2-> 为 tools.jar添加了错误的依赖项

我为使用 MacOS tools.jar 作为依赖项的 tools.jar添加了一个错误的依赖项。

但是我们的构建机器是 Linux 平台 ,所以我用 diff 错误日志得到了这个错误。

Cause JDK has different version with different platforms (MacOS, Linux, Windows)
based on the different platforms `VirtualMachine` has diff implementation (MacOS, Linux, Windows)

这是错误日志

Caused by:
java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null)


...


Caused by:
java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in sun.misc.CompoundEnumeration@3d529098


...


Caused by:
java.lang.reflect.InvocationTargetException


...


Caused by:
org.mockito.exceptions.base.MockitoInitializationException:
Could not initialize inline Byte Buddy mock maker.
...


Caused by:
java.lang.UnsatisfiedLinkError: sun.tools.attach.BsdVirtualMachine.getTempDir()Ljava/lang/String;
at sun.tools.attach.BsdVirtualMachine.getTempDir(Native Method)
at sun.tools.attach.BsdVirtualMachine.<clinit>(BsdVirtualMachine.java:308)
at sun.tools.attach.BsdAttachProvider.attachVirtualMachine(BsdAttachProvider.java:63)
at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208)




您可以在这里看到,VirtualMachine 找到 AttachProvider (BsdAttachProvider) ,但是在那之后它抛出一个异常。

这意味着我们添加了依赖项,但是依赖项是错误的。


如何正确添加 tools.jar依赖项

(1)将 tools.jar文件添加到 lib文件夹(错误)

add this `testImplementation fileTree(dir: 'libs', include: ['tools.jar'])` in the gradle file


this is not a good approach, cause our build machine (remote) may use the Linux system, but our local machine (Laptop, PC) may use the MacOS or Windows.


this will cause the Issue2  which I mentioned above

(2)在分级文件中加入 testImplementation files(org.gradle.internal.jvm.Jvm.current().toolsJar)。(错误)

this one will throw NullPointerException after gradle 4.X.

(3)在分级文件中加入 testImplementation files("${System.properties['java.home']}/../lib/tools.jar")

it will trying to read the environment virable to get the path for the `tools.jar`


Cause both build machine (remote) and local machine (Laptop, PC) need to configure the JDK to make it work.


So this approach should find it's own path even it's based on diff platform (MacOS, Linux, Windows)


This is the approach I am using, If you have better one, please let me know.

配置 Android Studio JDK 位置

不要使用 Android Studio Application 文件夹作为 JDK 位置。

使用 JAVA_HOME变量路径作为 JDK 的位置(可以在终端中键入 echo JAVA_HOME)

否则,当您运行单元测试时,它将显示此错误

Transform's input file does not exist: /Applications/Android Studio.app/Contents/jre/jdk/Contents/lib/tools.jar.

因为它的 Android Studio Application JDK 文件夹没有 tools.jar文件。(您可以将普通配置的 JDK 文件夹与 Android Studio Application Package one 进行比较)

/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home

完成这些步骤后,您应该能够运行单元测试。

如果在运行单元测试时得到这个 org.mockito.exceptions.misusing.NotAMockException

请确保正确配置了仿真内联。

问题链接(https://github.com/powermock/powermock/issues/992)

基于仿真文档(https://github.com/powermock/powermock/wiki/mockito#mockito-mock-maker-inline)

它提供了两种方法

  1. org.mockito.plugins.MockMaker

  2. org/powermock/extensions/configuration.properties

只要试试这两种方法,看看哪一种适合你,保留其中一种。

在我的情况下,第二个为我工作。

我也尝试了这个旧的方法 testImplementation 'org.mockito:mockito-inline:X.X.X'它不适合我。

如果使用不同版本的 spring-boot-test,可能会出现字节伙伴版本冲突,如上所述。要解决这个问题,可以使用 DepencyManagement:

<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.11.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>1.11.10</version>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>1.11.10</version>
</dependency>
</dependencies>
</dependencyManagement>

您可能在手动向项目添加依赖项时遇到了问题。请注意您的项目中正在使用的仿真核心 jar 版本。

访问这个 mvn 存储库链接

https://mvnrepository.com/artifact/org.mockito/mockito-core/{replace-with-your-mockito-core-version}

转到下面 mvn 存储库页面中的编译依赖项部分,下载所有适当版本的依赖项仿真核心需求。

至于回答这个问题:

字节好友

字节-伙伴-代理

客观事实

将所有内容与仿真核心一起添加到项目中并运行测试。

感谢 @Łukasz Rzeszotarski为他的解决-它为我工作。我只是想补充几个细节关于这个问题。

这个问题出现时,我包括 mockito-inline在我的年级项目,但我不能拒绝它。之所以出现这种情况,是因为 mockito-inline的结构如下:

META-INF:
MANIFEST.MF
mockito-exstensions:
org.mockito.plugins.MockMaker
org.mockito.plugins.MemberAccessor

其中文件 org.mockito.plugins.MockMaker包含:

mock-maker-inline

这个字符串是模拟最终类和方法所必需的,当您使用 JRE 而不是 JDK 时,它会导致问题。

我在使用仿真程序时遇到了这个问题,我通过使用最新版本的库解决了这个问题:

testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0'
testImplementation 'org.mockito:mockito-inline:4.4.0'

我也有同样的问题,但是我的有一些额外的信息。对我来说,这个问题特别是在 android 工作室,包括以下内容:

Caused by: java.io.IOException: Cannot run program ""/Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java""

结果显然这个库 没有在路径中处理空格,我不得不将我的“ Android Studio”实例重命名为“ AndroidStudio”

在我的例子中,我也有同样的问题,原因是字节伙伴的错误版本。 这是由 Maven 依赖复制引发的。重复的依赖项会用较低的版本覆盖较高版本的字节伙伴,从而造成问题。

回顾(在我的例子中) :

  1. Jar: 1.9.3应该可以工作,但是被 net.byteBuddy: byte-Buddy: jar: 1.7.9从一个重复的依赖项覆盖了,这导致了我的问题。

解决方案 :

  1. 用下面的代码检查 maven 依赖项:
mvn dependency:tree -Dverbose
  1. 如果你发现类似下面的内容:
[INFO] |  +- org.mockito:mockito-core:jar:2.23.4:test
[INFO] |  |  +- (net.bytebuddy:byte-buddy:jar:1.9.3:compile - scope updated from test; omitted for duplicate)
[INFO] |  |  +- net.bytebuddy:byte-buddy-agent:jar:1.9.3:test
...
[INFO] +- io.springfox:springfox-core:jar:2.8.0:compile
[INFO] |  +- net.bytebuddy:byte-buddy:jar:1.7.9:compile

您可以排除 pom.xml 上 byte-Buddy 的重复的下面版本,如下所示(这就是我的情况) :

<groupId>io.springfox</groupId>
<artifactId>springfox-core</artifactId>
<version>2.8.0</version>
<exclusions>
<exclusion>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
</exclusion>
</exclusions>

在我的例子中,我尝试了对齐 Mocito 和 byte Buddy 的版本,但还是出现了错误。我做了一个 mvn dependency:tree命令来查看所有的依赖关系,我发现了一些来自我的组织的专有软件包,其中包括 powermock 和 modito 依赖关系。在排除这些依赖项之后,错误消失了