使用依赖项执行Project到Maven中的另一个本地项目

时间:2015-06-12 07:14:35

标签: maven

我有以下项目结构:

-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,我该怎么做? (如果我从project2执行mvn clean package,则找不到project1)。我想在不安装project1之前做到这一点。
  3. 当然,如果需要,可以更改项目的结构。

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

    父/ PROJECT1 / 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>
    

    parent / project3 / pom.xml与project2

    相似

1 个答案:

答案 0 :(得分:0)

Re 1。:&#34;如何在项目2中执行课程?&#34;

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

如果您使用默认生命周期的test阶段或其中一个阶段调用mvn,则会执行test个类(默认情况下为Maven Surefire Plugin)进一步在Lifecycle Reference

中描述的链中

编辑:

Re 2. &#34;我想在不安装project1的情况下这样做。&#34;

如果你没有预先安装p1,那么在构建p2时Maven应如何解决p1?见Maven Dependency Resolution – A Repository Perspective

  

当Maven从存储库中解析依赖项时,这些是它遵循的基本步骤:

     

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

     

2。尝试从本地存储库中找到依赖 ,如果找到则解析它。

     

3。到8。 [包括远程存储库]