微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JUnit测试有效,但由于在macOS上找不到库DYLD_LIBRARY_PATH,Maven测试失败

如何解决JUnit测试有效,但由于在macOS上找不到库DYLD_LIBRARY_PATH,Maven测试失败

我有一个简单的JUnit测试,可以在macOS Mojave上的Eclipse中成功运行。该类对动态库进行JNA调用,因此我必须设置运行时环境变量DYLD_LIBRARY_PATH

当我尝试在Eclipse内部或外部运行mvn test时,它们将失败。

据我了解,原因是macOS的System Integrity Protection。但是,一定可以设置它们,因为Eclipse中的JUnit测试按设计工作。

我试图“破解”最终执行的mvn shell脚本:

exec "$JAVACMD" \
  $MAVEN_OPTS \
  $MAVEN_DEBUG_OPTS \
  -classpath "${CLASSWORLDS_JAR}" \
  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
  "-Dmaven.home=${MAVEN_HOME}" \
  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${CLASSWORLDS_LAUNCHER} "$@"

通过在DYLD_LIBRARY_PATH命令前紧接设置exec,但未成功。 还尝试修补$JAVACMD来首先设置变量,没有运气。

我错过了哪些选择(禁用SIP除外)?

我不是在寻找通用解决方案,运行mvn是我的目标

类似的问题:

解决方法

我找到了一个解决方案,我不喜欢它,但是它似乎有效。 JNA调用出局以加载使用@executable_path批注的其他代码。运行Java,可执行文件是JVM,而不是原始应用程序,因此JNA调用将失败。

链接整个程序目录(此后进行清理)对我来说很成功。我对mvn的呼叫如下:

#!/bin/bash
# Ugly hack to make mvn play ball
JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
for onelib in $(ls /Applications/HCL\ Notes.app/Contents/MacOS)
do
    echo "Linking /Applications/HCL\ Notes.app/Contents/MacOS/${onelib}"
    sudo ln -s /Applications/HCL\ Notes.app/Contents/MacOS/${onelib} ${JAVA_HOME}/jre/bin/${onelib}
done
# Maven test    
mvn test
# Cleanup
sudo find $JAVA_HOME/jre/bin -maxdepth 1 -type l -delete

YMMV

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。