如何在Maven中添加test-jar作为aspectLibrary

时间:2017-03-15 03:15:02

标签: maven aspectj

我有一个方面,我想在我的测试类中使用。我不想将它添加到主jar中,因为它会引入像junit和mockito这样的测试库。虽然有一个配置设置来添加一个aspectLibrary,但它总是添加主jar,没有办法指定测试jar。

我的aspectj插件看起来像这样:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.7</version>
    <configuration>
        <aspectLibraries>
        <aspectLibrary>
            <groupId>aspect.test</groupId>
            <artifactId>general</artifactId>
            <type>jar</type>
        </aspectLibrary>
        </aspectLibraries>
    </configuration>
    <executions>
        <execution>
        <phase>process-sources</phase>
        <goals>
            <goal>compile</goal>
            <goal>test-compile</goal>
        </goals>
        </execution>
    </executions>
</plugin>

我实际上想要指定test-jar,但这似乎并不可行。没有它默认为jar(显然)。

我也可能需要为编译和测试编译目标配置aspectj-maven-plugin ...但首先我需要知道如何指定test-jar。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

请阅读Maven JAR插件文档,第How to create a jar containing test classes章。列出了两个选项:

  • 简单方法:使用“test-jar”类型(这里不起作用)
  • 首选方法:创建仅包含测试类的普通JAR,然后使用范围“test”
  • 导入它

我们会选择首选方式,因为它可以解决您的问题。所以基本上你做了以下几点:

  • 为测试助手方面/类创建一个单独的模块,将所有内容放在src/main/java 而不是 src/test/java下。 AspectJ Maven插件应该对该模块执行<goal>compile</goal>
  • 在需要测试方面的任何地方将该模块添加为测试范围的依赖项
  • 从AspectJ Maven插件中将该模块称为<acpectLibrary>,并且还要小​​心在该模块的插件执行中仅使用<goal>test-compile</goal>,以避免将这些方面编入生产代码或获取错误消息,因为依赖项具有测试范围,并且无法进行正常编译。

因为我不想在这里完全引用3个POM和几个类,所以我为你创建了一个GitHub sample project。只需克隆它,检查所有文件及其各自的位置,并 - 快乐。 ; - )