当前位置: 首页 > 知识库问答 >
问题:

在多模块maven项目中运行exec maven插件时出现问题

锺伟志
2023-03-14

我有一个多模块Maven项目,有一个主pom和许多子目录,每个子目录都包含引用主pom的项目(和pom.xml文件)。

在project ectA中包含对exec-maven-plugin的调用,它执行java目标并成功调用驻留在project ectA中某个地方的测试类(在project ectA/test/com/mycompany/Testclass.java)。插件声明如下:org.codehaus.mojoexec-maven-plugin 1.2.1

                <execution>
                    <id>execute-test</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.mycompany.Testclass</mainClass>
                        <classpathScope>test</classpathScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我使用以下命令执行maven,它工作正常:mvnverify-P

我还有第二个项目,projectB,它依赖于projectA。我已经在projectB的pom中配置了一个ExecMaven插件部分。与上面相同的xml文件。当我使用与上面相同的命令运行maven时(除了-pl参数中的projectB),我会得到异常java。lang.ClassNotFoundException:com。我的公司。Testclass

很明显,这是因为我运行maven for projectB时的类路径不包括projectA中的目录,即使pom是。xml依赖于projectA(实际上它依赖于projectA.1,而projectA.1又依赖于projectA)。

我曾尝试在project ectB中切换到使用exec目标而不是java目标,然后在参数中提供一个类路径,如下所示:

                <execution>
                    <id>execute-test</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>java</executable>
                        <arguments>
                            <argument>-classpath</argument>
                            <argument>"../projectA/target/projectA-6.6.1-bSOURCE-tests.jar;../projectA/target/projectA-6.6.1-bSOURCE.jar"</argument>
                            <argument>com.mycompany.Testclass</argument>
                        </arguments>
                        <classpathScope>test</classpathScope>
                    </configuration>
                </execution>

完成后,我成功地加载了类,但在com上获得了ClassNotFoundException。谷歌。格森。JsonSyntaxException

这与我从命令行运行该类时遇到的错误相同,如下所示

java-classpath“projectA/target/projectA-6.6.1-bSOURCE-tests.jar;projectA/target/projectA-6.6.1-bSOURCE.jar”com。我的公司。Testclass

在project ectB中,我想使用exec-maven-plugin的java目标,而不是exec目标,但是无论如何,我必须能够指定类路径。

知道我该怎么做吗?

谢谢


共有1个答案

云宜人
2023-03-14

我自己发现了这一点,并且正在发布我的答案,以防其他人需要它,或者任何人想质疑它(或者提出更好的建议)。

我所做的是在下属项目projectB中添加一个依赖项,如下所示:

    <dependency>
        <groupId>com.mycompany</groupId>
        <artifactId>projectA</artifactId>
        <version>6.6-SNAPSHOT</version>
        <scope>test</scope>
        <classifier>tests</classifier>
    </dependency>

我相信关键是元素,它指示maven从包含project ectA中测试类的jar文件中获取依赖类。

 类似资料:
  • 问题内容: 这是一个基本问题,我只是不太熟悉Maven多模块结构。说,我有一个Web应用程序。我想将一些模块连接到它(某些服务)。我是否需要仅将其中一个模块(依赖于其他模块)制作为一个Web应用程序,然后运行它?一开始我以为我可以运行整个项目,但是这个选项在我的IDE中是无效的(我现在正在使用NetBeans),这使我认为我应该运行一个类似于主模块的东西(在这种情况下为Web应用程序) )。是这样

  • 我有一个多模块的项目,有两个模块:war和ear模块。我正在尝试使用Maven发行版插件来管理发行版。 我的配置到目前为止... 父POM: war模块POM: ear模块POM: 正如您看到的表单日志,test-war-0.0.1-sources.jar正在上传两次。这是为什么?我怎样才能编辑我的配置,使它只上传一次?

  • 我正在IntelliJ IDEA终极版2020.2中制作一个maven项目。这是一个多模块项目。当我从其中一个模块运行一个类时,我会收到错误,但如果我从打包的jar运行,它会运行良好。这是应用程序的结构: 这是主要的pom.xml: pom。DatabaseTier模块中的xml: pom。报告模块中的xml: 这是我得到的错误: 初始化启动层java时出错。lang.LayerInstation

  • 我是maven的新手,在使用程序集插件生成zip文件时花了大约3天的时间,引用了http://www.petrikainulainen.net/programming/tips-and-tricks/creating-a-runnable-binary-distribution-with-maven-assembly-plugin/My project is multi module,所以我还引用

  • 我有一个多模块maven项目。请在父POM下方找到。 儿童POM如下所示。 我已经在parent中声明了从slf4j进行日志记录,但在eclipse中没有生成相同的maven依赖项,因此我无法在代码中使用日志记录。谁能告诉我这里出了什么问题吗。

  • 问题内容: 我一直在尝试使用Maven Shade插件来获取jar,但是我仍然没有成功。 这是我的项目结构: Module1(pom.xml): Module2(pom.xml): MainModule(pom.xml): 根据这段代码,我得到了2个jar文件(Module1-version.jar和Module2-version.jar)。但这不是我想要的。我希望得到1个jar文件(MainMo