Несогласованность при запуске java jar через CLI и IntelliJJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Несогласованность при запуске java jar через CLI и IntelliJ

Сообщение Anonymous »

Мой проект имеет следующую структуру:

Код: Выделить всё

src
└── main
└── java
└── tests
├── functional
│   ├── TestA
│   └── TestB
├── verification
│   └── TestC
└── TestsRunner.java
target
├── classes
├── lib
│   ├── depA
│   ├── depB
│   └── ..
├── app.jar
└── ..
Основной класс находится в классе TestsRunner.java -

Код: Выделить всё

package tests;

import lombok.extern.slf4j.Slf4j;
import picocli.CommandLine;

import java.util.concurrent.Callable;

@Slf4j
@CommandLine.Command(name = "run", mixinStandardHelpOptions = true, version = "1.0", description = "Run tests")
public class TestsRunner implements Callable {

@CommandLine.Option(names = {"-s", "--suite"}, required = true, description = "Suite name")
private String testSuiteName;

@CommandLine.Option(names = {"-o", "--output"}, required = true, description = "Test reports output directory")
private String reportOutputDir;

public static void main(String[] args) {
int exitCode = new CommandLine(new TestsRunner()).execute(args);
System.exit(exitCode);
}

@Override
public Integer call() throws Exception {
var basePackage = switch (testSuiteName) {
case "functional" -> "tests.functional";
case "verification" -> "tests.verification";
default -> throw new RuntimeException("Unknown tests suite: " + testSuiteName);
};
var runner = Junit5ServiceTestsRunner.builder()
.classNamePattern(".*Test")
.classNamePattern(".*Tests")
.basePackage(basePackage)
.reportOutputDir(reportOutputDir)
.build();
var result = runner.run();
return result.isSuccess() ? 0 : 1;
}
}
Я также использую плагин maven-jar-plugin, чтобы скопировать все зависимости в каталог lib и указать основной класс

Код: Выделить всё

org.apache.maven.plugins
maven-jar-plugin
3.2.0

app


true
tests.TestsRunner
lib


false


.




При запуске класса TestsRunner через IntelliJ я использую конфигурацию запуска Modify, чтобы указать значения -s и -o .
Запуск приложения через IntelliJ работает, выходные данные содержат результаты выполненных тестов (обратите внимание на 1 успешный тест):

Код: Выделить всё

Test run finished after 4246 ms
[         3 containers found      ]
[         0 containers skipped    ]
[         3 containers started    ]
[         0 containers aborted    ]
[         3 containers successful ]
[         0 containers failed     ]
[         1 tests found           ]
[         0 tests skipped         ]
[         1 tests started         ]
[         0 tests aborted         ]
[         1 tests successful      ]
[         0 tests failed          ]
Теперь я вижу, что IntelliJ использует собственный Java-агент, а также явно указывает путь к классам при каждом запуске:

Код: Выделить всё

"C:\Program Files\Java\jdk-17.0.8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\lib\idea_rt.jar=65474:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1.3\bin"  -Dfile.encoding=UTF-8 -classpath C:\Users\xxx\Documents\GitHub\my-project\tests\target\classes;C:\Users\xxx\.m2\repository\info\picocli\picocli\4.7.1\picocli-4.7.1.jar;C:\Users\xxx\.m2\repository\com\core\testing\mock-servers-junit5\1.1.0\mock-servers-junit5-1.1.0.jar ..........(all other dependencies) tests.TestsRunner -s verification -o report
При запуске из командной строки в целевом каталоге с использованием:

Код: Выделить всё

java -jar app.jar -o ${JUNIT_OUTPUT_FOLDER} -s ${SUITE_NAME}
Как будто он не распознает и не находит никаких тестов. Я получаю следующий результат:

Код: Выделить всё

Test run finished after 62 ms
[         1 containers found      ]
[         0 containers skipped    ]
[         1 containers started    ]
[         0 containers aborted    ]
[         1 containers successful ]
[         0 containers failed     ]
[         0 tests found           ]
[         0 tests skipped         ]
[         0 tests started         ]
[         0 tests aborted         ]
[         0 tests successful      ]
[         0 tests failed          ]
Наверное, стоит упомянуть, что среда тестирования — JUnit5, тесты запускаются с использованием шаблона и расширения.

Код: Выделить всё

@TestTemplate
@ExtendWith(SomeClass.class)
Других функций, аннотированных @Test, нет.
Дело в том, что мои проекты генерируются на основе шаблона. Все мои услуги структурированы и ведут себя одинаково. Это единственный сервис, с которым я столкнулся с этой проблемой.
Я думал, что это как-то связано с путем к классам, но в моем app.jar я вижу, что все в порядке. , манифест выглядит нормально, в нем есть все зависимости, основной класс правильный и тестовые классы присутствуют. Но тем не менее, я попытался изменить java jar на java cp и указать каталоги пути к классам, а также передать основной класс -

Код: Выделить всё

java -cp "app.jar:lib/*:classes" tests.TestsRunner -s verification -o reports
Но результат тот же.
Любое предложение будет отличным, спасибо.

Подробнее здесь: https://stackoverflow.com/questions/784 ... d-intellij
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»