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

执行与 Maven 中另一个本地项目具有依赖关系的项目

姜嘉赐
2023-03-14

我有以下项目结构:

-parent (<packaging>pom</packaging>)
 |
 |--project 1(jar)
 |
 |--project 2 (jar, depends on project 1)
 |
 |--project 3 (jar, depends on project 1)

问题:

  1. 如何在项目2中执行类?mvn exec:java 来自哪个项目?
  2. 如果我只想编译/打包 project2,我该怎么做?(如果我从项目2中执行mvn清理包,则找不到项目1)。我想在不安装项目1的情况下执行此操作。

当然,如果需要的话,项目的结构可以改变。

下面显示了pom.xml文件中的相关部分。父/砰.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>

    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>0.0.4-SNAPSHOT</version>
    <name>parent: the parent project</name>
    <groupId>com.domain</groupId>

    <modules>
        <module>project1</module>
        <module>project2</module>
        <module>project3</module>
    </modules>

  <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.domain</groupId>
            <artifactId>project1</artifactId>
            <version>${version.releaseVersion}</version>
        </dependency>

        <dependency>
            <groupId>com.domain</groupId>
            <artifactId>project2</artifactId>
            <version>${version.releaseVersion}</version>
        </dependency>

        <dependency>
            <groupId>com.domain</groupId>
            <artifactId>project3</artifactId>
            <version>${version.releaseVersion}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
//other plugins defined in the <build> tag are not shown here
</project>

父/项目1/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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>parent</artifactId>
        <groupId>com.domain</groupId>
        <version>0.0.4-SNAPSHOT</version>
    </parent>

    <artifactId>project1</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>Project1: common classes</name>

</project>

父/项目2/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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>parent</artifactId>
        <groupId>com.domain</groupId>
        <version>0.0.4-SNAPSHOT</version>
    </parent>

    <artifactId>project2</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>Project2: JMS gateway</name>


    <dependencies>
        <dependency>
            <groupId>com.domain</groupId>
            <artifactId>project1</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>project2-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>

                <configuration>
                    <mainClass>com.domain.jmsgateway.Demon</mainClass>
                </configuration>
            </plugin>

        </plugins>
    </build>

</project>

父/项目3/pom.xml与项目2相似

共有1个答案

翟学文
2023-03-14

Re 1。:“如何执行项目2中的一个类?”

Maven是一个构建工具。默认情况下,您的main类不会自动执行。执行您的main类应该通过将适当的Maven插件分配/绑定到默认生命周期的集成测试阶段来配置,或者在构建后完全在Maven之外-取决于您的项目。

如果您使用默认生命周期的< code>test阶段或生命周期参考中描述的链中的其他阶段调用< code>mvn,您的< code>test类将被执行(默认情况下由Maven Surefire插件执行)。

回复2:“我想在之前不安装project1的情况下进行此操作。”

如果您至少没有提前安装< code>p1,那么在构建< code>p2时,Maven应该如何解析< code>p1?请参见Maven依赖性解析——存储库视角:

当 Maven 从存储库解析依赖关系时,以下是它遵循的基本步骤:

1. 如果此依赖项的范围是系统,只需从本地文件系统解析它。

2.尝试从本地存储库中找到依赖项,如果找到,请解决它。

3. 至 8.[包括远程存储库]

 类似资料:
  • 我得到了一个项目结构,它使用GUI实现了一个棋盘游戏,在一个IntelliJ项目中包含两个项目/模块。两者都使用Maven来管理依赖关系。 模块 A(游戏逻辑) 模块 B(游戏 GUI) 模块A使用模块B中的类,A的pom.xml包含以下依赖项: 但是Game-gui只是包含在项目本身和信息(groupId,artifactId等)中的模块B。)是在模块B的pom.xml中指定的,所以它指的就是这

  • 我面临着以下问题。我有两个Gradle项目(ProjectA和ProjectB)在同一个层次结构上,没有任何根项目。由于ProjectA依赖于ProjectB,我尝试将其建模如下: ProjectA的settings.gradle: ProjectA的build.gradle: 然而,当我在ProjectA上执行gradle build时,我得到了以下错误: 我必须在ProjectB中定义某种默认

  • 我是和的新手。我正在尝试在远程计算机上运行hdfs MapReduce作业。我没有写入/编辑依赖项文件的权限。我想知道是否可以将我的Maven项目传递给我的MapReduce作业。这样,我就不需要SSH进入远程机器并更改maven项目的依赖关系。我将使用包含远程计算机上未包含的所有所需依赖项的JAR来运行我的MapReduce作业。

  • 假设一组简单的项目a、B、C,每个项目都需要使用相同的公共项目Z。所有部分都在持续开发中。 这适用于Z类中的一个简单形式。 但是,假设我们从SwingX或其他非标准库中向类Z的表单添加组件。这个自动将相应的库依赖项添加到项目Z中。我们可以通过直接运行Z.main()来测试Z--工作得很好。但是,如果我们现在重新编译并运行a.main(),就会抛出一个异常:找不到SwingX(或其他)库。 这可以通

  • 我有两个maven项目将它们称为MainProject和DependnecyProject。我在MainProject项目中使用了DependnecyProject函数,这意味着DependnecyProject是MainProject项目的依赖项。 MainProject pom.xml 在我的本地eclipse中,这是完全完美的,执行没有任何问题。 它在本地很好地工作,但不知道如何使它在詹金斯

  • 问题内容: 我创建了一个新的Spring Web应用程序,我非常想使用Maven处理构建/依赖关系。我的问题是,该项目依赖于一些现有的本地项目,而目前尚无法对它们进行美化。是否有可能依赖这些项目而不破坏它们? 问题答案: 不,您不应该尝试这样做。Maven的主要目标是拥有标准化的构建。这就是使Maven易于使用的原因:异常不是常态。这就是为什么Maven要求所有依赖项都采用典型的Maven格式(P