我在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

  • 为此,您必须链接两个命令。
    因为仅在构建成功后才想执行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/

    10-16 17:46