HP TestExportTool 不断询问依赖项

HP TestExportTool ask for dependencies continuously

我有一个 LeanFT 项目,当我从 IDE 执行它时,它工作正常。我用 maven-assembly-plugin.

生成了一个 jar 文件
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <archive>
            <manifest>
                <mainClass>test.LeanFTest</mainClass>
            </manifest>
        </archive>
        <finalName>${project.artifactId}-fatjar-${project.version}</finalName>
        <appendAssemblyId>false</appendAssemblyId>
        <descriptors>
            <descriptor>src/main/assembly/leanft-assembly.xml</descriptor>
        </descriptors>
    </configuration>
</plugin>

当我尝试通过 TestExportTool 执行它(为 ALM 导入生成 XML 文件)时,我收到各种错误消息,例如:

log4j: WARN JmDNS or serviceInfo not found

java.lang.UnsatisfiedLinkError: no NTEventLogAppender

java.lang.NoClassDefFoundError

我导入了所有必要的 类,解决了这些问题,但是 TestExportTool 一次又一次地出现异常。 我添加了这些依赖项,由错误消息报告,但项目没有使用这些依赖项,所以不确定为什么要这样。

   <dependency>
        <groupId>org.jmdns</groupId>
        <artifactId>jmdns</artifactId>
        <version>3.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.11.0</version>
    </dependency>
    <dependency>
        <groupId>org.dblock.log4jna</groupId>
        <artifactId>log4jna-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.21</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

leanft-assembly.xml 文件:

<id>fat-tests</id>
<formats>
    <format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
    <dependencySet>
        <outputDirectory>/</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <unpack>true</unpack>
        <scope>test</scope>
    </dependencySet>
</dependencySets>
<fileSets>
    <fileSet>
        <directory>${project.build.directory}/test-classes</directory>
        <outputDirectory>/</outputDirectory>
        <includes>
            <include>*.class</include>
        </includes>
        <useDefaultExcludes>true</useDefaultExcludes>
    </fileSet>
</fileSets>

最新错误消息的详细堆栈跟踪:

Hewlett-Packard Enterprise LeanFT Test Export Tool. [main] DEBUG javax.jmdns.impl.JmDNSImpl - JmDNS instance created 2018-07-06 11:17:21,741 Exception in thread "main" java.lang.NoClassDefFoundErr or: org/apache/tools/ant/taskdefs/LogOutputStream at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access0(Unknown Source) at java.net.URLClassLoader.run(Unknown Source) at java.net.URLClassLoader.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.hp.lft.testexporttool.internal.JarFileLoader.getPublicClassesFrom JarFile(JarFileLoader.java:48) at com.hp.lft.testexporttool.internal.TestsExporter.export(TestsExporter .java:26) at com.hp.lft.testexporttool.ExportTests.main(ExportTests.java:41) Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.taskdefs.LogOu tputStream at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source)

更新 07.09.: 我添加了 TestExportTool 请求的所有依赖项。我从 Hewlett-Packard Enterprise LeanFT 测试导出工具收到以下消息:

[main] DEBUG javax.jmdns.impl.JmDNSImpl - JmDNS instance created 2018-07-09 13:25:17,419 bshpath.BshClassLoader

默认情况下,maven 不会在生成的 jar 中包含所有依赖项。它总是假设那些已经存在于目标系统中。您有 2 种可能性:

  1. 将这些 jar 文件粘贴到目标系统 $classpath / libs 文件夹
  2. 将您的 Maven 项目配置为 export all dependencies 作为 jar 的一部分(这会使您的 jar 文件爆炸)
  3. 不推荐:将 jar 文件复制到 jre 运行 ALM 系统 的 lib\ext 文件夹中。这些将被加载到使用此 jre 的每个应用程序中。

听起来 NTEventLogAppender.dll 在 PATH 上不可用。有关 Log4J 如何以及为何使用它的更多详细信息 here - 它可在 .zip 下载文件中找到。

但是,这仅适用于 Log4J (v1.2) 而不是 Log4J 2 - 看起来这就是那些依赖项中所需要的?对于 Log4J 2,SLF4J 绑定应该是 org.apache.logging.log4j:log4j-slf4j-impl:2.11.0(而不是 org.slf4j:slf4j-log4j12:1.7.25)。

IntelliJ IDEA 中的 JAR 生成插件导致的问题。我将相同的项目导出到 Eclipse 并在文件 -> 导出选项下生成 JAR 文件,并且文件在从 ALM 执行时工作正常。