Я запускаю проект Spring Boot с оболочкой Maven.
С консоли я могу запустить mvn clean install
. Из Eclipse я могу запустить его, щелкнув правой кнопкой мыши -> Run as -> Maven install.
Однако при использовании оболочки Maven из командной строки:
./mvnw clean install
Это не работает. Я думаю, что это из-за следующих строк в верхней части вывода при запуске оболочки:
[ПРЕДУПРЕЖДЕНИЕ] POM для org.apache.camel: camel-spring-boot: jar: 2.21.0 недействителен, транзитивные зависимости (если таковые имеются) будут недоступны, для получения более подробной информации включите ведение журнала отладки
[ПРЕДУПРЕЖДЕНИЕ] POM для org.apache.camel: camel-core: jar: 2.21.0 недействителен, транзитивные зависимости (если таковые имеются) будут недоступны, для получения более подробной информации включите ведение журнала отладки
[ПРЕДУПРЕЖДЕНИЕ] POM для org.apache.camel: camel-servlet: jar: 2.21.0 недействителен, транзитивные зависимости (если таковые имеются) будут недоступны, для получения более подробной информации включите ведение журнала отладки
[ПРЕДУПРЕЖДЕНИЕ] POM для org.apache.camel: camel-sql: jar: 2.21.0 недействителен, переходные зависимости (если таковые имеются) будут недоступны, для получения более подробной информации включите ведение журнала отладки
[ПРЕДУПРЕЖДЕНИЕ] POM для org.apache.camel: camel-test-spring: jar: 2.21.0 недействителен, транзитивные зависимости (если таковые имеются) будут недоступны, для получения более подробной информации включите ведение журнала отладки
И, наконец, вся сборка завершается неудачей:
Caused by: java.lang.ClassNotFoundException: org.apache.camel.spring.SpringCamelContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.camel.test.spring.CamelSpringBootExecutionListener.prepareTestInstance(CamelSpringBootExecutionListener.java:41)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Я могу заставить его работать, указав каталог для загрузки, чтобы получить новую установку:
./mvnw clean install -Dmaven.repo.local=tmp
Мое основное применение для обертки - в нашей среде CI, которая в основном заставляет указанную выше строку, так как мы впоследствии отбрасываем изображение.
Мой локально установленный maven имеет следующую информацию о версии (mvn -v
):
Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_162, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-121-generic", arch: "amd64", family: "unix"
Оболочка имеет следующую информацию о версии (mvn -v
):
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T09:58:13+02:00)
Maven home: /home/kajo/.m2/wrapper/dists/apache-maven-3.5.2-bin/7hf0mht29afbpa1e4v2d1a16p0/apache-maven-3.5.2
Java version: 1.8.0_162, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-121-generic", arch: "amd64", family: "unix"
Мне любопытно, почему это не работает и в чем корень проблемы. Компиляция и тестирование сборки занимают намного больше времени, когда мне приходится загружать свежие установки, чтобы заставить его работать с помощью оболочки.