В JShell, как импортировать classpath из проекта Maven
У меня есть местный проект Maven в стадии разработки. Как я могу запустить jshell
путь к классу проекта со всеми зависимостями, чтобы я мог тестировать классы проекта или зависимости внутри JShell.
5 ответов
Я написал простой сценарий оболочки, вставленный в путь поиска выполнения:
Файл сценария оболочки: mshell
mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=.cp.txt
jshell --class-path `cat .cp.txt`:target/classes
Затем в каталоге проекта maven (для многомодульного проекта убедитесь, что в каталоге модулей вместо родительского каталога) выполните:
$ cd $MAVEN_PROJECT_HOME #make sure module folder for multi-module project
$ mshell
Спасибо Джей за указание на опцию -DincludeTypes=jar maven.
Вы можете использовать jshell-maven-plugin:
mvn com.github.johnpoth:jshell-maven-plugin:1.1:run
который запустит сеанс JShell с путем выполнения вашего проекта. Если вы хотите включить свои тестовые зависимости, просто добавьте -DtestClasspath в команду.
Исходный код: https://github.com/johnpoth/jshell-maven-plugin; взносы приветствуются:) полный отказ от ответственности: я написал плагин.
Наслаждайтесь!
См. В Maven, как вывести используемый classpath?,
В соответствии с:
jshell --help
запустить JShell с:
jshell --class-path <path>
Из-за ошибки JDK 8177650 решения здесь с использованием
--class-path
вариант или запуск из maven нарушит автозаполнение пакета. Вот однострочный bash, который работает с автозаполнением пакетов:
CLASSPATH=`mvn dependency:build-classpath -DincludeTypes=jar -Dmdep.outputFile=/dev/stderr 2>&1 >/dev/null`:target/classes jshell
Использовать Groovy-оболочку (
groovysh
) вместо этого и сделать
groovy.grape.Grape.grab([group:"<maven group>", artifact:"<maven artifact ID>", version:"<version>"])
- это даст вам REPL с необходимыми зависимостями Maven в пути к классам.
Не уверен, что у jshell есть какие-либо преимущества перед оболочкой Groovy, которые стоят боли с зависимостями Maven.