如何在maven测试阶段重新定位包?
我有两个相互冲突的依赖项:apachespark和json4s 本json4s版本中描述了详细信息,但不是决定性的: 我更喜欢简单而残酷的解决方案:添加我自己的json4s依赖项,并在出现JAR地狱时重新定位它们:如何在maven测试阶段重新定位包?,maven,automated-tests,packaging,maven-shade-plugin,Maven,Automated Tests,Packaging,Maven Shade Plugin,我有两个相互冲突的依赖项:apachespark和json4s 本json4s版本中描述了详细信息,但不是决定性的: 我更喜欢简单而残酷的解决方案:添加我自己的json4s依赖项,并在出现JAR地狱时重新定位它们: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin&l
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<outputFile>${project.build.directory}/${assembly.jar.dir}/${assembly.jar.basename}</outputFile>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<relocations>
<relocation>
<pattern>org.json4s</pattern>
<shadedPattern>org.my-project.json4s</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
maven阴影插件
2.4.3
${project.build.directory}/${assembly.jar.dir}/${assembly.jar.basename}
*:*
META-INF/*.SF
META-INF/*.DSA
META-INF/*.RSA
包裹
阴凉处
假的
org.json4s
org.my-project.json4s
不幸的是,这个插件只影响包阶段,它前面是测试阶段,而测试阶段根本不能从重新定位中获益。因此,maven测试经常抛出错误警报,这些警报根本不会影响打包的全包JAR,和/或无法检测由重新定位引起的错误
我正在寻找一套一致的maven插件,它可以保证包重定位和类加载顺序是相同的,无论java程序是由maven测试的,还是java程序是在生产中打包和部署的。对于本应长期存在的maven构建模型来说,这似乎是一项简单而乏味的任务。然而,当我搜索“maven搬迁”时。我只能找到有限的资源,其中大部分是指maven shade插件
那么,我应该做些什么来可靠地解决这个问题并使maven测试真正有用呢?(如果它与您的生产程序无关,那么测试有什么意义?)如果没有现成的解决方案,那么编写自己的maven插件有多难
PS:我曾尝试将构建工具链迁移到OSGI,但结果发现它的维护性要差得多,并导致了一组不同的错误和维护成本。因此,我最终放弃了,转而求助于maven。如果您依赖于打包,则需要在集成测试阶段而不是测试阶段将测试作为集成测试运行。此外,您所说的:
结果是,maven test经常抛出错误警报,这些警报根本不会影响打包的全包JAR,和/或无法检测由重新定位引起的错误。
。你在那里测试什么?maven测试不重新定位,打包的JAR重新定位,这在java类之间造成了差异,因此出现了一些新错误,一些旧错误消失了。说到集成测试,它从1开始就不能使用。这是一个多模块的项目&maven shade插件只在最后一个模块中使用,在这一点上可以进行的测试很少。2.spark的类加载顺序与java应用的类加载顺序完全不同,因此,它仍然不能保证成功。集成可以依靠maven shade部分来完成,而且集成测试可以作为一个独立的模块来完成,该模块依赖于适当的模块。如果您依赖于打包,则需要在集成测试阶段而不是测试阶段作为集成测试来运行测试。此外,您所说的:结果是,maven test经常抛出错误警报,这些警报根本不会影响打包的全包JAR,和/或无法检测由重新定位引起的错误。
。你在那里测试什么?maven测试不重新定位,打包的JAR重新定位,这在java类之间造成了差异,因此出现了一些新错误,一些旧错误消失了。说到集成测试,它从1开始就不能使用。这是一个多模块的项目&maven shade插件只在最后一个模块中使用,在这一点上可以进行的测试很少。2.spark的类加载顺序与java应用程序的类加载顺序完全不同,因此仍然不能保证成功。集成可以依靠maven shade部分来完成,而且集成测试可以作为一个单独的模块来完成,依赖于适当的模块。