有没有一种简单的方法可以在surefire-plugin测试类路径上添加jar

时间:2011-11-04 22:16:30

标签: java maven-3 maven-surefire-plugin

有这个属性additionalClasspathElements但不幸的是它不处理带有jar的目录

这个问题真的很难处理......发生在我身上的唯一方法是创建一个准备类路径的mojo,但我不知道接下来会是什么

在我的pom定义中创建一个包含175个jar的列表看起来很有趣。在additionalClasspathElements中它将是525行

我需要启动一个巨大的项目,即不使用maven。由于175 libs的版本兼容性,声明它们几乎是不可能的。 Imho直接从项目的类路径加载它们是唯一的方法

2 个答案:

答案 0 :(得分:3)

首先,使用通配符制作类路径:

<additionalClasspathElements>
    <additionalClasspathElement>
        /path/to/lib/*.jar
    </additionalClasspathElement>
</additionalClasspathElements>

您必须使用以下属性:

<useManifestOnlyJar>false</useManifestOnlyJar>  
<useSystemClassLoader>false</useSystemClassLoader>

因为,看看ForkConfiguration.java:

if ( useManifestOnlyJar )
{
    File jarFile;
    try
    {
        jarFile = createJar( classPath );
    }
    catch ( IOException e )
    {
        throw new SurefireBooterForkException( "Error creating archive file", e );
    }

    cli.createArg().setValue( "-jar" );

    cli.createArg().setValue( jarFile.getAbsolutePath() );
}
else
{
    cli.addEnvironment( "CLASSPATH", StringUtils.join( classPath.iterator(), File.pathSeparator ) );

    final String forkedBooter = ForkedBooter.class.getName();

    cli.createArg().setValue( shadefire ? new Relocator().relocate( forkedBooter ) : forkedBooter );
}

您希望将类路径连接并附加到CLI,而不是仅显示JAR ...

这应该适用于简单的依赖项。但是如果你想要启动一些大的东西,使用类加载器,我会推荐一些bmargulies做的。因为你会打那么难的imho :-) See here why

为了灵感,I wrote a dependency installer将jar安装到本地maven资源库并生成包含所有这些依赖项的pom定义,以便您可以将自己用作依赖项(将所有依赖项放在类路径上 - 传递依赖项)...最好的方式去imho。它是一个非常通用的Mojo,它不必在Liferay上使用。你只需要玩一点。

答案 1 :(得分:1)

编写一个shell脚本,遍历所有这些jar,使用伪造的groupId,artifactId和version调用mvn install:install-file。

使用<dependency/>使shell脚本为所有这些元素的Maven <scope>test</scope>元素写出XML。

将生成的XML blob插入POM。

退后一步。