有这个属性additionalClasspathElements但不幸的是它不处理带有jar的目录
这个问题真的很难处理......发生在我身上的唯一方法是创建一个准备类路径的mojo,但我不知道接下来会是什么
在我的pom定义中创建一个包含175个jar的列表看起来很有趣。在additionalClasspathElements中它将是525行
我需要启动一个巨大的项目,即不使用maven。由于175 libs的版本兼容性,声明它们几乎是不可能的。 Imho直接从项目的类路径加载它们是唯一的方法
答案 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。
退后一步。