Как включить зависимости из классов тестов и основного исполняемого класса в одну банку - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать исполняемый файл jar, который запустит мой тест на селенид.

TestClass

public class TestClass {

    @Test
    public void openBrowser(){
        System.setProperty("webdriver.chrome.driver", "chrome location");
        open("google.com");
    }
}

Test Executor

public class TestExecutor {
     public static void main(String[] args) {
        TestListenerAdapter tla = new TestListenerAdapter();
        TestNG testng = new TestNG();
        testng.setTestClasses(new Class[] { TestClass.class });
        testng.addListener((ITestNGListener) tla);
        testng.run(); 

    }
}

build.gradle

plugins {
    id 'java'
}
repositories {
    maven {
        url = 'jfrog artifactory url'
    }
}
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
task testJar(type: ShadowJar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle',
                'Implementation-Version': project.version,
                'Main-Class': 'TestExecutor'
    }
    from sourceSets.test.output
    configurations = [project.configurations.testRuntime]
}

test {
    useJUnitPlatform()
 }



dependencies {
    testCompile  'org.seleniumhq.selenium:selenium-java:3.141.59'
    testCompile   'org.apache.poi:poi:4.1.0'
    testCompile   'org.apache.poi:poi-ooxml:4.1.0'
    testCompile  'org.slf4j:slf4j-simple:1.7.5'
    testCompile   group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.5.2'
    testCompile  group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: '5.5.2'
    testCompile   group: 'com.codeborne', name: 'selenide', version: '5.1.0'
    testCompile   group: 'com.aventstack', name: 'extentreports', version: '4.0.9'
    testCompile  group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.5.2'
    testCompile group: 'org.testng', name: 'testng', version: '6.14.3'

    compile  group: 'org.testng', name: 'testng', version: '6.14.3'
}


group 'groupId'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8

при сборке jar-файла не удается найти тестовые зависимости.

Я попытался добавить путь testRuntimeClasspath в jar вот так

  from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
        configurations.testRuntimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }

, но затем я получаю сообщение об ошибке: Не удалось найти или загрузить основной класс

Я пытался запустить это для 2+ недели. Я не знаю, что мне нужно делать на самом деле, потому что все это для меня в новинку. ОТПРАВИТЬ ПОМОЩЬ.

1 Ответ

0 голосов
/ 27 мая 2020

Я бы порекомендовал вам использовать плагин Gradle Shadow JAR , вместо того, чтобы самостоятельно создавать JAR со всеми транзитивными зависимостями. У них даже есть точный пример для этого случая в документации :

// Shadowing Test Sources and Dependencies
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

task testJar(type: ShadowJar) {
    classifier = 'tests'
    from sourceSets.test.output
    configurations = [project.configurations.testRuntime]
}

Таким образом, вы будете на 100% уверены, что ваш последний JAR будет иметь все необходимые зависимости для запуска без возиться с collect s.

И не забудьте указать основной класс, как описано здесь .

shadowJar {
    manifest {
        attributes 'Main-Class': 'a.b.C' // FQDN!
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...