繁体   English   中英

Java + Maven-测试类的可执行jar

[英]Java + Maven - executable jar from test class

我有一个多模块Selenium项目,该项目正在使用Page Factory,并通过调用mvn clean verify...在套件中运行测试mvn clean verify...

我创建了一个JavaFX应用程序,该应用程序加载了所有套件,并允许用户选择一个测试,然后由上述命令运行该测试。

我现在面临的问题是,为了加载所有测试类(我在模块依赖项中使用test-jar,以便我在app模块中的测试类可以查看其他模块中的测试),我需要有main在主类中的测试类的方法,并没有。 显然,这是行不通的,因为测试类未包含在jar中。

我正在寻找一个解决方案,要么在测试类中使用main方法,要么让src / main查看src / test。

人们一直提出的建议之一是为测试提供一个单独的模块。 不过,这对我来说不是一个选择,因为我无权随意移动测试类或更改项目结构。

这是我正在使用的插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <archive>
        <manifest>
          <mainClass>com.package.myapp.Main</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <appendAssemblyId>false</appendAssemblyId>
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

为了加载套件,我使用ClassLoader loader = Thread.currentThread().getContextClassLoader() ,它从ClassPath.from(loader).getTopLevelClasses()获得ImmutableSet<ClassPath.ClassInfo>

这是有关解耦模块的标准问题:您有两个模块:从属模块和独立模块。 您需要从依赖对象中调用独立对象,但不将独立对象包括在依赖对象的编译中。

因此,您可以选择几个选项:

  1. 在编译时知道独立模块的API和协议时。 在这种情况下,您应该设计一个接口来对每个独立API进行建模。 将这些接口发布到单独的库中,然后将Independent库重新扩展到这些接口。 还提供一个工厂,该工厂通过动态实例化一组类名(在运行时接收)来返回这些接口的对象。

在Dependent模块中,您只需调用工厂即可获取每个接口实现并使用它。

  1. 当独立模块的API和协议在编译时未知时。

呃... 我衷心希望这不是您的情况,因为它不符合标准设计的良好实践。 无论如何,在Java中,您始终可以通过使用Reflection调用任何对象中的任何方法。 虽然我不会建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM