当前位置: 首页 > 面试题库 >

有没有使用maven运行可执行jar的好方法?

段干兴业
2023-03-14
问题内容

我有一个多模块Maven项目,其中一个模块用于分发。

Project \
| moduleA \
| moduleB \
| ...
| dist-module \

该发行版包含一个我想轻松执行的可执行jar。但是,要执行它,我必须键入类似以下内容:

java -jar dist-module/target/dist-module-1.0-SNAPSHOT-full-dist/myJar.jar

简单键入以下内容将是更好的选择:

mvn exec:java \ OR
mvn exec:exec

不幸的是,我找不到找到执行.jar的java目标的方法。exec目标实际上可以做到,但是有一个陷阱:jar包含一个嵌入式码头服务器,并且由于exec的工作方式(不使用与maven相同的JVM),除非我杀死进程,否则服务器不会终止手动,这同样很麻烦。

关于如何使用Maven执行此操作的任何建议?

编辑:
为澄清起见,此命令将主要用于简单的手动烟雾测试;读取日志输出并确保程序在其分发环境中正确启动。这样,它可能应该是带有ctrl-
c的终止服务器和Maven的阻塞调用。

嵌入式服务器专用于运行一些特定的应用程序,并且不会自动重新加载它们。因此,不需要长时间独立于maven保持服务器运行。


问题答案:

mvn exec:java直接从目标/下的编译器输出运行应用程序-无需从jar运行:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>default-cli</id>
                <goals>
                    <goal>java</goal>
                </goals>
                <configuration>
                    <mainClass>uk.co.pookey.hibernate.App</mainClass>
                    <systemProperties>
                        <systemProperty>
                            <key>derby.stream.error.file</key>
                            <value>${basedir}/target/derby.log</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </execution>
        </executions>
    </plugin>

如果要使用mvn exec:exec运行jar:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>default-cli</id>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>java</executable>
                    <!-- optional -->
                    <workingDirectory>/tmp</workingDirectory>
                    <arguments>
                        <argument>-jar</argument>
                        <argument>${basedir}/target/hibernate-derby-memory-${project.version}.jar</argument>
                    </arguments>
                </configuration>                        
            </execution>
        </executions>
    </plugin>

如果您在终止码头方面遇到问题,建议您进行集成测试(或者只是在不先终止码头的情况下退出码头主线程,或者仅使用码头的停止端口)!可以在后台运行JVM,然后让maven在测试后再次将其停止。此过程分为三个阶段:集成前测试,集成测试或集成后测试。您可以在http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing上了解有关此内容的更多信息。当使用jetty
maven插件时,pom.xml配置可能像:

   <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <!-- test start/stop: -->
        <executions>                
            <execution>
                <id>start-jetty</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>deploy-war</goal>
                </goals>
                <configuration>
                    <daemon>true</daemon>
                    <systemProperties>
                        <systemProperty>
                            <name>some.prop</name>
                            <value>false</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </execution>
            <execution>
                <id>stop-jetty</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>stop</goal>
                </goals>
            </execution>
        </executions>    
    </plugin>

可以将Maven antrun插件绑定到执行任意命令,而不是将jetty maven插件绑定到这些阶段。



 类似资料:
  • 喜欢 mvn exec:java-Dexec.mainClass=“packageName.class” mvn-Dtest=“className#method” 在maven生成的目标/jar文件上,上面的命令有效吗,或者还有其他命令吗? 如果不在pom上应用maven插件,则无法找到搜索此类命令以在maven生成的jar上运行junit

  • 我正在尝试创建maven项目的可执行jar文件。 下面是我的pom.xml 下面是最后一个命令的控制台输出。

  • 问题内容: 我不想将其打包在单个可执行jar中进行分发。我需要一个可执行文件,例如main.jar,所有依赖项都在libs / *。jar中 我如何才能使maven可执行jar不预先包含在其依赖库中? 在如何使用Maven创建具有依赖项的可执行JAR中?10年12月1日10:46回答了一条注释,安德烈·阿隆森(AndréAronsen),但那根本不起作用(未设置失败的sadescriptorRef

  • 我有一个mvn项目,它包含对apache Commons-Lang3的依赖。我设法为这个jar文件生成了一个manifest.mf,它通过我的远程服务器上的java-jar.jar启动。然而,它不包括任何依赖项,我不知道为什么。 您可以看到,它正确地将依赖关系解析为commons-lang并将其放入清单中。但实际文件不见了。 有人知道为什么吗?

  • 我有一个用maven创建的Selenium TestNG项目`` 此项目没有主类 我的要求:现在我想将这个项目打包到可执行的jar中,或者是否有任何选项来生成一个可执行文件,这样我就可以使用批处理文件来计划运行。 为此,我运行了“mvn package”命令,并在目标文件夹中生成了jar文件。现在,当我尝试以java-jar myproj-0.0.1-SNAPSHOT的形式运行它时。我得到的消息是

  • 我试图用scala和Maven创建可执行jar。我正在使用maven-scala-plugin和maven-assembly-plugin,但在我看来,汇编插件被忽略了。我得到没有依赖项的jar和包含没有主类行的manifest。