1

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

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

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

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

4

2 回答 2

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 做什么。因为你会努力战斗恕我直言:-)看看这里为什么

为了获得灵感,我编写了一个依赖安装程序,它将 jars 安装到本地 maven 存储库中,并生成带有所有这些依赖项的 pom 定义,以便您可以将自己用作依赖项(将其所有依赖项放在类路径上 - 传递依赖项)......最好的方法去恕我直言。它是一个非常通用的 Mojo,不必在 Liferay 上使用它。你只需要玩一点。

于 2011-11-06T02:41:07.693 回答
1

编写一个遍历所有这些 jar 的 shell 脚本,调用 mvn install:install-file 并使用虚构的 groupId、artifactId 和版本。

<dependency/>让 shell 脚本为所有的 Maven 元素写出 XML ,使用<scope>test</scope>.

将生成的 XML 块插入 POM。

退后。

于 2011-11-05T23:31:38.840 回答