Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果我在根pom上从命令行运行插件,它在遍历模块时做什么?_Java_Scala_Maven_Gatling - Fatal编程技术网

Java 如果我在根pom上从命令行运行插件,它在遍历模块时做什么?

Java 如果我在根pom上从命令行运行插件,它在遍历模块时做什么?,java,scala,maven,gatling,Java,Scala,Maven,Gatling,我正在尝试使用插件: 我正在尝试在根pom上运行此命令: mvn package gatling:execute 此多模块项目仅在一个子pom中定义了此插件,如下所示: <plugins> <plugin> <groupId>io.gatling</groupId> <artifactId>gatling-maven-plugin</artifactId&g

我正在尝试使用插件:

我正在尝试在根pom上运行此命令:

mvn package gatling:execute
此多模块项目仅在一个子pom中定义了此插件,如下所示:

    <plugins>
        <plugin>
            <groupId>io.gatling</groupId>
            <artifactId>gatling-maven-plugin</artifactId>
        </plugin>

        <plugin>
            <groupId>net.alchim31.maven</groupId>
            <artifactId>scala-maven-plugin</artifactId>
            <version>3.2.1</version>
            <configuration>
                <args>
                    <arg>-deprecation</arg>
                    <arg>-feature</arg>
                    <arg>-language:postfixOps</arg>
                </args>
            </configuration>
            <executions>
                <execution>
                    <id>scala-compile-first</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>add-source</goal>
                        <goal>compile</goal>
                    </goals>
                </execution>
                <execution>
                    <id>scala-test-compile</id>
                    <phase>process-test-resources</phase>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
这不是一个scala项目,所以这肯定与插件有关。运行
mvn包
而不运行
gatling:execute
工作正常

我对maven的了解不足以解决这个问题,因为我真的不知道maven在这里想做什么。如果它试图从根本上治理加特林,为什么?该插件没有在根pom中的任何位置定义。我的问题是:

  • 当您在多模块项目的根目录下运行插件时,它如何遍历我的项目、查找插件并运行它们?我只是抽象地问这个问题。你不必用加特林来回答。我只是想更好地理解maven插件

  • 如何解决此问题?我想我可以将scala添加到根pom中,但由于这将是该级别的第一个依赖项,因此似乎这是错误的方法

    我也可以将
    cd
    放入有这个插件的一个子pom中并在那里运行命令,但这意味着我将只在项目的一部分上运行
    package
    。理想情况下,在运行插件之前,我希望在整个项目上运行


  • 使用这样的插件目标运行maven将为所有项目模块运行该目标,就像
    mvn install
    将安装每个模块一样。你不必在任何地方定义插件——如果你在命令行上指定它,它就会运行

    您将插件的执行正确地绑定到一个或多个生命周期阶段,在本例中是
    流程资源
    流程测试资源
    。如果运行
    mvn compile
    ,将执行
    过程资源
    阶段,并且将为gatling插件运行
    添加源
    编译
    目标。类似地,运行
    mvn test
    (在
    mvn安装时也会运行该测试)将运行gatling插件的
    testCompile
    目标

    您要做的是还绑定
    execute
    目标,如示例所示 上。如果您想先将所有
    d绑定到
    :

    
    集成测试
    执行
    ....
    

    请注意,
    integrationtest
    package
    之后(在
    install
    之前),因此要运行它,请执行
    mvn integrationtest
    mvn install
    ,具体取决于插件。如果它是一个核心插件,它将使用一些。您还可以使用
    mvn-groupId:artifactId:version:goal
    (或非常接近该语法的东西)指定任何随机maven插件在命令行上运行。该
    execute
    提示非常有用。但是我希望这个插件在包之后运行,而不是在包运行期间。我还想先在其他地方运行包。我可以使用什么技术来实现这一点?更新了答案:有一个集成测试阶段正是为了这个目的。对不起,我沟通不好。我的意思是我只想在包后运行这个插件,有时,不是每次。我不希望在每个
    包之后都触发此操作,我希望明确地告诉它运行。不客气。顺便说一句,还有;使用配置文件,您可以使用
    将其默认设置为true,并使用配置文件覆盖该值。但是在概要文件中定义插件更便于移植。祝你好运
    [INFO] ------------------------------------------------------------------------
    [INFO] Building root-pom 2.5.210-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] --- gatling-maven-plugin:2.1.7:execute (default-cli) @ root-pom ---
    java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at io.gatling.mojo.MainWithArgsInFile.runMain(MainWithArgsInFile.java:50)
        at io.gatling.mojo.MainWithArgsInFile.main(MainWithArgsInFile.java:33)
    Caused by: java.lang.RuntimeException: Can't find the jar matching (.*scala-library.*\.jar)$
        at io.gatling.compiler.ZincCompiler$$anonfun$jarMatching$1$2.apply(ZincCompiler.scala:88)
        at io.gatling.compiler.ZincCompiler$$anonfun$jarMatching$1$2.apply(ZincCompiler.scala:88)
        at scala.Option.getOrElse(Option.scala:120)
        at io.gatling.compiler.ZincCompiler$.jarMatching$1(ZincCompiler.scala:88)
        at io.gatling.compiler.ZincCompiler$.setupZincCompiler(ZincCompiler.scala:91)
        at io.gatling.compiler.ZincCompiler$delayedInit$body.apply(ZincCompiler.scala:106)
        at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
        at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
        at scala.App$$anonfun$main$1.apply(App.scala:71)
        at scala.App$$anonfun$main$1.apply(App.scala:71)
        at scala.collection.immutable.List.foreach(List.scala:318)
        at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32)
        at scala.App$class.main(App.scala:71)
        at io.gatling.compiler.ZincCompiler$.main(ZincCompiler.scala:35)
        at io.gatling.compiler.ZincCompiler.main(ZincCompiler.scala)
        ... 6 more
    
    <execution>
      <phase>integration-test</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
         ....
      </configuration>
    </execution>