【问题标题】:Munit Issue for SAP connector while working with maven,使用 maven 时 SAP 连接器的 Munit 问题,
【发布时间】:2017-01-28 07:16:20
【问题描述】:

您好,我在使用 maven 代码运行 munit 时遇到以下问题 我有一个包含 sap 连接器的流,然后为流完成了 munit 并尝试使用 maven 运行 munit,得到以下异常,需要帮助 :.

[ERROR] Failed to shut down registry cleanly: org.mule.Registry.Spring
org.mule.api.lifecycle.LifecycleException: Failed to invoke lifecycle phase "dispose" on object: SapConnector$$EnhancerByCGLIB$$1f197d8f
{
  name=SAP_08
  lifecycle=not in lifecycle
  this=298e706
  numberOfConcurrentTransactedReceivers=4
  createMultipleTransactedReceivers=true
  connected=false
  supportedProtocols=[sap]
  serviceOverrides=<none>
}

    at org.mule.lifecycle.phases.DefaultLifecyclePhase.applyLifecycle(DefaultLifecyclePhase.java:248)
    at org.mule.lifecycle.phases.MuleContextDisposePhase.applyLifecycle(MuleContextDisposePhase.java:102)
    at org.mule.config.spring.SpringRegistryLifecycleManager$SpringContextDisposePhase.applyLifecycle(SpringRegistryLifecycleManager.java:141)
    at org.mule.lifecycle.RegistryLifecycleCallback.doApplyLifecycle(RegistryLifecycleCallback.java:91)
    at org.mule.lifecycle.RegistryLifecycleCallback.onTransition(RegistryLifecycleCallback.java:67)
    at org.mule.lifecycle.RegistryLifecycleManager.invokePhase(RegistryLifecycleManager.java:140)
    at org.mule.lifecycle.RegistryLifecycleManager.fireLifecycle(RegistryLifecycleManager.java:111)
    at org.mule.registry.AbstractRegistry.dispose(AbstractRegistry.java:68)
    at org.mule.registry.AbstractRegistryBroker$2.onTransition(AbstractRegistryBroker.java:69)
    at org.mule.registry.AbstractRegistryBroker$2.onTransition(AbstractRegistryBroker.java:64)
    at org.mule.lifecycle.RegistryLifecycleManager.invokePhase(RegistryLifecycleManager.java:140)
    at org.mule.lifecycle.RegistryBrokerLifecycleManager.fireDisposePhase(RegistryBrokerLifecycleManager.java:82)
    at org.mule.registry.AbstractRegistryBroker.dispose(AbstractRegistryBroker.java:63)
    at org.mule.registry.MuleRegistryHelper.fireLifecycle(MuleRegistryHelper.java:137)
    at org.mule.lifecycle.MuleContextLifecycleManager$MuleContextLifecycleCallback.onTransition(MuleContextLifecycleManager.java:91)
    at org.mule.lifecycle.MuleContextLifecycleManager$MuleContextLifecycleCallback.onTransition(MuleContextLifecycleManager.java:87)
    at org.mule.lifecycle.MuleContextLifecycleManager.invokePhase(MuleContextLifecycleManager.java:69)
    at org.mule.lifecycle.MuleContextLifecycleManager.fireLifecycle(MuleContextLifecycleManager.java:61)
    at org.mule.DefaultMuleContext.dispose(DefaultMuleContext.java:345)
    at org.mule.context.DefaultMuleContextFactory.doCreateMuleContext(DefaultMuleContextFactory.java:230)
    at org.mule.context.DefaultMuleContextFactory.createMuleContext(DefaultMuleContextFactory.java:81)
    at org.mule.munit.runner.MunitMuleContextFactory.createMuleContext(MunitMuleContextFactory.java:85)
    at org.mule.munit.runner.MuleContextManager.createMule(MuleContextManager.java:97)
    at org.mule.munit.runner.MuleContextManager.startMule(MuleContextManager.java:56)
    at org.mule.munit.runner.mule.MunitSuiteRunner.<init>(MunitSuiteRunner.java:42)
    at org.mule.MUnitMojo.buildRunnerFor(MUnitMojo.java:311)
    at org.mule.MUnitMojo.doExecute(MUnitMojo.java:173)
    at org.mule.MUnitMojo.execute(MUnitMojo.java:122)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ExceptionInInitializerError: JCo initialization failed with java.lang.ExceptionInInitializerError: Illegal JCo archive "sapjco3-3.0.13.jar". It is not allowed to rename or repackage the original archive "sapjco3.jar".
    at com.sap.conn.jco.rt.MiddlewareJavaRfc.<clinit>(MiddlewareJavaRfc.java:230)
    at com.sap.conn.jco.rt.DefaultJCoRuntime.initialize(DefaultJCoRuntime.java:98)
    at com.sap.conn.jco.rt.JCoRuntimeFactory.<clinit>(JCoRuntimeFactory.java:23)
    at com.sap.conn.jco.rt.RuntimeEnvironment.<init>(RuntimeEnvironment.java:43)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:379)
    at com.sap.conn.jco.ext.Environment.getInstance(Environment.java:155)
    at com.sap.conn.jco.ext.Environment.isDestinationDataProviderRegistered(Environment.java:401)
    at com.mulesoft.mule.transport.sap.jco3.SapJcoFactory.startup(SapJcoFactory.java:198)
    at com.mulesoft.mule.transport.sap.jco3.SapJcoFactory.<clinit>(SapJcoFactory.java:45)
    at com.mulesoft.mule.transport.sap.SapConnector.doDispose(SapConnector.java:198)
    at com.mulesoft.mule.transport.sap.SapConnector$$EnhancerByCGLIB$$1f197d8f.CGLIB$doDispose$4(<generated>)
    at com.mulesoft.mule.transport.sap.SapConnector$$EnhancerByCGLIB$$1f197d8f$$FastClassByCGLIB$$c6f1beab.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:215)
    at org.mule.modules.interceptor.connectors.ConnectorMethodInterceptor.intercept(ConnectorMethodInterceptor.java:48)
    at com.mulesoft.mule.transport.sap.SapConnector$$EnhancerByCGLIB$$1f197d8f.doDispose(<generated>)
    at org.mule.transport.AbstractConnector$4.onTransition(AbstractConnector.java:596)
    at org.mule.transport.AbstractConnector$4.onTransition(AbstractConnector.java:592)
    at org.mule.lifecycle.AbstractLifecycleManager.invokePhase(AbstractLifecycleManager.java:138)
    at org.mule.transport.ConnectorLifecycleManager.fireDisposePhase(ConnectorLifecycleManager.java:89)
    at org.mule.transport.AbstractConnector.dispose(AbstractConnector.java:591)
    at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.mule.lifecycle.phases.DefaultLifecyclePhase.applyLifecycle(DefaultLifecyclePhase.java:237)
    ... 48 more
[INFO] Closing org.mule.munit.runner.spring.config.MunitApplicationContext@53830ac9: startup date [Tue Sep 20 16:30:07 IST 2016]; root of context hierarchy
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38.910s
[INFO] Finished at: Tue Sep 20 16:30:19 IST 2016
[INFO] Final Memory: 76M/269M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.mulesoft.munit.tools:munit-maven-plugin:1.1.0:test (test) on project mule_onprem_to_sap: Execution test of goal com.mulesoft.munit.tools:munit-maven-plugin:1.1.0:test failed: org.mule.api.config.ConfigurationException: Failed to invoke lifecycle phase "initialise" on object: SapConnector$$EnhancerByCGLIB$$1f197d8f
[ERROR] {
[ERROR] name=SAP_08
[ERROR] lifecycle=not in lifecycle
[ERROR] this=298e706
[ERROR] numberOfConcurrentTransactedReceivers=4
[ERROR] createMultipleTransactedReceivers=true
[ERROR] connected=false
[ERROR] supportedProtocols=[sap]
[ERROR] serviceOverrides=<none>
[ERROR] }
[ERROR] (org.mule.api.lifecycle.InitialisationException): org/mule/module/reboot/EEMuleContainerBootstrap: org.mule.module.reboot.EEMuleContainerBootstrap
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

【问题讨论】:

  • 提供你的 pom 的相关部分(或全部)会有所帮助
  • "JCo 初始化失败,出现 java.lang.ExceptionInInitializerError: Illegal JCo archive "sapjco3-3.0.13.jar"。不允许重命名或重新打包原始存档 "sapjco3.jar"。"听起来很清楚......

标签: maven mule sap munit


【解决方案1】:

@Ankit Prakash 这是 SAP maven 依赖问题。

您必须按照下面描述的步骤来克服 SAP JCo 和 Maven 施加的限制,并获得一个能够在 Studio 中运行的项目:

1 - 将资源安装到本地 Maven 存储库

下面指定的命令是将 jar 和本机库安装到本地 Maven 存储库所必需的。请注意,我们正在展示如何为 MaOS 64 位、Linux x86 64 位和 Windows 64 位安装本机库。

sapidoc3.jar,版本 3.0.12: mvn install:install-file -DgroupId=com.sap.conn.idoc -DartifactId=sapidoc3 -Dversion=3.0.12 -Dpackaging=jar -Dfile=sapidoc3.jar

sapjco3.jar,版本 3.0.14: mvn install:install-file -DgroupId=com.sap.conn.jco -DartifactId=sapjco3 -Dversion=3.0.14 -Dpackaging=jar -Dfile=sapjco3.jar

原生库 MacOS 64 位,版本 3.0.14: mvn install:install-file -DgroupId=com.sap.conn.jco -DartifactId=sapjco3 -Dversion=3.0.14 -Dclassifier=darwinintel64 -Dpackaging=jnilib -Dfile=libsapjco3.jnilib

本机库 Linux x86 64 位,版本 3.0.14: mvn install:install-file -DgroupId=com.sap.conn.jco -DartifactId=sapjco3 -Dversion=3.0.14 -Dclassifier=linuxx86_64 -Dpackaging=so -Dfile=libsapjco3.so

本机库 Windows AMD 64 位,版本 3.0.14: mvn install:install-file -DgroupId=com.sap.conn.jco -DartifactId=sapjco3 -Dversion=3.0.14 -Dclassifier=ntamd64 -Dpackaging=dll -Dfile=sapjco3.dll

执行上述步骤后,包含 sapjco3 版本 3.0.14 资源的文件夹将包含以下文件:

~/.m2/repository/com/sap/conn/jco/sapjco3/3.0.14

  • sapjco3-3.0.14-darwinintel64.jnilib
  • sapjco3-3.0.14.jar
  • sapjco3-3.0.14-NTAMD64.dll
  • sapjco3-3.0.14-linuxx86_64.so
  • sapjco3-3.0.14.pom

同样,包含 sapidoc3 版本 3.0.12 的资源的文件夹将包含以下文件:

~/.m2/repository/com/sap/conn/idoc/sapidoc3/3.0.12

  • sapidoc3-3.0.12.jar
  • sapidoc3-3.0.12.pom

2 - 使用提供的 POM

使用附加的POM 作为所有使用 MuleSoft Connector for SAP Solutions 的应用程序的基础。

请注意,我们使用的是根据操作系统和体系结构自动激活的配置文件来设置将使用的本机库的名称。

我们还创建了一个名为 studio 的配置文件,当您需要将所有 jar 和相应的本地库包含到部署存档中时,您必须激活该配置文件,当您运行命令 @987654328 时将生成该文件@。

3 - 将本机库复制到您的 Studio 项目中

在您的 mavenized Studio 项目的根级别创建一个名为 lib 的目录,并将本机库复制到那里。在构建和打包应用程序时,该文件夹的内容不会包含在部署存档中。

4 - 更改 Maven 设置以激活工作室配置文件

  • 转到运行 -> 运行配置...
  • 选择您的 mavenized 项目
  • 转到 Maven 设置选项卡
  • 输入以下参数:-Druntime=studio

希望这会有所帮助。

【讨论】:

  • 感谢您的回复,但我已经尝试了上述方法,但使用 maven 部署 munit 的结果仍然相同。如果尝试使用 -DskipMunitTests 跳过 munit 测试用例,则会部署代码。你能提供替代建议吗?
  • 我在 munit 测试用例中模拟了 SAP 连接器。当我尝试运行 munit 测试用例“作为 MUnit 测试运行时,它正在工作。当我尝试使用 maven 命令“mvn clean package -DskipMunitTests”运行完整的应用程序时,它正在部署,但是当我尝试使用 maven 命令“mvn clean包”我面临像非法 JCO 归档这样的问题......
  • @AnupamBhusari ,无论如何我得到了这个问题的解决方案,感谢您的建议和帮助。
  • @AnkitPrakash 请分享您如何解决此问题,以帮助可能遇到相同问题的其他用户。
【解决方案2】:

这是一个老问题,但以防万一有人遇到这个问题,然后添加以下依赖项。请注意,范围是测试,因为在运行时不需要它。

    <dependency>
        <groupId>com.mulesoft.muleesb.modules</groupId>
        <artifactId>mule-module-boot-ee</artifactId>
        <scope>test</scope>
    </dependency>

【讨论】:

    【解决方案3】:

    我得到了 SAP jar 的 Munit 问题的答案。

    请按照以下步骤解决此问题:-

    1. 将 SAP 库添加到类路径:

      (a) 导航到构建路径 > 配置构建路径

      (b) 在“库”选项卡中,单击“添加库...”按钮

      (c) 选择 Anypoint 连接器依赖项

      (d) 选择 SAP 连接器选项。

    2. 您可能还需要使 java.library.path 指向 本机库位于。 MUnit Studio 插件会尝试找到这些 本机库并在您尝试运行时自动配置它们 测试。如果找不到它们,则需要添加以下 vm 参数 在运行配置中:

      (a) 在 Studio 的顶部导航栏中,点击运行

      (b) 点击运行配置...​

      (c) 选择参数选项卡

      (d) 在 VM Arguments 对话框中,使用

      键入库的路径
      java.library.path argument.
      Example: -Djava.library.path=path/to/lib
      

    来自 Maven

    将库添加到类路径的一种方法是在 maven 插件中使用 additionalClasspathElements 参数。 您可以提供要添加的每个 SAP 库的路径:

    <additionalClasspathElements>
        <additionalClasspathElement>/path/to/lib/sapjco3.jar</additionalClasspathElement> 
        <additionalClasspathElement>/path/to/lib/sapidoc3.jar</additionalClasspathElement>
    </additionalClasspathElements>
    

    注意:-如果 pom 中已经存在 sap 依赖,但库名不符合 SAP 命名限制,则可能需要将它们排除在测试运行之外。这样,使用additionalClassPathElement 参数添加的库将优先:

    <classpathDependencyExcludes> 
        <classpathDependencyExclude>com.sap.conn.idoc:sapidoc3</classpathDependencyExclude>  
        <classpathDependencyExclude>com.sap.conn.jco:sapjco3</classpathDependencyExclude>
    </classpathDependencyExcludes>
    

    此外,您需要使 java.library.path 属性指向本机库目录,类似于在 Studio 中的做法。 为此,您可以使用 argLine 参数添加额外的 vm 参数。

    <argLines>
        <argLine>-Djava.library.path=/path/to/native/lib/folder</argLine>
    </argLines>
    

    希望以上描述对你有所帮助。

    更多详情请参考链接:-Munit with SAP jars

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      相关资源
      最近更新 更多