我正在尝试使用Maven和NAR插件来构建和测试DLL。我正在构建的DLL依赖于另一个DLL,它也是我使用NAR插件构建的。这是我的POM:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myproject</artifactId>
<packaging>nar</packaging>
<name>My Project</name>
<version>1.0.0-SNAPSHOT</version>
<properties>
<skipTests>true</skipTests>
</properties>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.codeswarm</groupId>
<artifactId>maven-nar-plugin</artifactId>
<version>20121119</version>
<extensions>true</extensions>
<configuration>
<cpp>
<defines>
<define>DLLEXPORT</define>
</defines>
</cpp>
<libraries>
<library>
<type>shared</type>
</library>
</libraries>
<tests>
<test>
<name>ProjectTest</name>
<link>shared</link>
</test>
</tests>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>shared-library</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>nar</type>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>如果我去掉了对com.mycompany:shared-library的依赖--也去掉了想要调用它的代码--那么它就能正常工作。ProjectTest运行正常,做它应该做的事情。但是由于存在依赖项,maven无法运行测试,因为它找不到shared-library。它会崩溃,并出现错误0xc0000135。
当我在调试模式下运行Maven时,我可以看到,当它编译测试时,它正确地将两个DLL的头文件的包含路径添加到编译器命令中。当它链接测试时,它会正确地将两个DLL的导出库添加到链接器命令中。当Maven执行测试时,问题就出现了: Maven想要将DLL的路径添加到系统路径中,它做到了这一点--但它只将路径添加到myproject DLL中。它不会将路径添加到shared-library DLL。因此才会发生崩溃。
这是maven-nar-plugin中的一个已知问题吗?我还听说有一些NAR插件的分支漂浮在周围;除了我正在使用的插件之外,这个问题可能会在其他版本的插件中修复吗?或者有什么可以推荐的变通方法?
发布于 2012-12-20 01:08:03
发现这是一个已知问题:https://issues.sonatype.org/browse/NAR-189
https://stackoverflow.com/questions/13920728
复制相似问题