我在IntelliJ上创建了一个Maven项目,它可以正确运行。
现在,我想在不使用IntelliJ的情况下使用Docker启动我的项目。
我使用以下命令启动我的项目:docker run -it --rm --name my-maven-project -v /var/www/html/Recommandation:/usr/src/mymaven -p 88:88 -w /usr/src/mymaven maven:latest mvn clean install
它来自Maven Docker Hub:https://hub.docker.com/_/maven/
使用此命令,项目已构建但无法运行。所以我在末尾添加:docker run -it --rm --name my-maven-project -v /var/www/html/Recommandation/:/usr/src/mymaven -p 88:88 -w /usr/src/mymaven maven:latest mvn clean install java target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App
但是现在,该项目不再被构建:
[INFO] ------------------< org.exemple.demo:Recommandation >-------------------
[INFO] Building Recommandation 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.201 s
[INFO] Finished at: 2020-07-01T08:28:09Z
[INFO] ------------------------------------------------------------------------
[ERROR] Unknown lifecycle phase "java". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException
这是我的pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.exemple.demo</groupId>
<artifactId>Recommandation</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<defaultGoal>install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>org.exemple.demo.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging>
<name>Recommandation</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>7</maven.compiler.source>
<maven.compiler.target>7</maven.compiler.target>
</properties>
<dependencies>
...
</dependencies>
</project>
您能告诉我如何通过Docker正确执行我的Maven项目吗?我没有找到任何信息可以自己解决这个问题。编辑
确实,我已经尝试过&&,但是我有一个印象,就是因为这,执行命令的是主机而不是容器。这样的事情正在发生:
$ docker run -it --rm --name my-maven-project -v /var/www/html/Recommandation/:/usr/src/mymaven -p 88:88 -w /usr/src/mymaven maven:latest mvn clean install
$ java target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App
Error: unable to find or load main class target.Recommandation-1.0-SNAPSHOT.jar
这是;
的相同问题我也尝试过这个:
docker run -it --rm --name my-maven-project -v /var/www/html/Recommandation/:/usr/src/mymaven -p 88:88 -w /usr/src/mymaven maven:latest bash -c "mvn clean install && java target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App"
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 41.383 s
[INFO] Finished at: 2020-07-01T10:33:16Z
[INFO] ------------------------------------------------------------------------
Error: Could not find or load main class target.Recommandation-1.0-SNAPSHOT.jar
Caused by: java.lang.ClassNotFoundException: target.Recommandation-1.0-SNAPSHOT.jar
最佳答案
这不是Maven问题。
您将命令传递给docker的方式有些错误。
基本上,您尝试在容器内执行以下命令:
mvn clean install java target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App
如果尝试在主机上执行此操作,则会收到与容器中相同的错误。您要在容器中执行两个单独的命令:
为此,您必须链接两个命令。
因为仅在构建成功后才想执行JAR文件,所以必须使用
&&
运算符。mvn clean install && java target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App
有关更多详细信息,请在此处查看此帖子:10 Useful Chaining Operators in Linux with Practical Examples
顺便说一句。您不需要执行
install
目标。 package
应该足够了。编辑
正如您现在在输出中看到的那样,项目已成功编译,但是您的JAR文件无法执行。这是因为您缺少
-jar
参数。 (我也没有在原始答案中注意到这一点。)因此,您应该执行以下命令:
mvn clean install && java -jar target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App
编辑2
关于你的评论
您完全正确-这对我来说是一种误导性的解释。
如果要将其传递给
docker run
命令,则必须执行以下操作:docker run [your_parameters] maven:latest /bin/bash -c "mvn clean install && java -jar target/Recommandation-1.0-SNAPSHOT.jar org.exemple.demo.App"
关于java - 未知生命周期阶段 “java”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62672857/