Maven多项目问题

时间:2013-11-14 22:12:27

标签: maven

我的多项目Maven项目存在一些问题。

问题如下: 我有一个按以下方式组织的项目:

root
 +-- pom.xml
 !
 +-- module1 
 !     +-- pom.xml
 +-- module2
       +-- pom.xml

module2取决于module1

Module1打包为war,它还会生成jar依赖的module2文件。 每当更改仅在module2中时,一切都很好,即module1.jar已经在远程仓库中,但是当mvn clean release:clean release:prepare release:perform期间两个模块都发生更改时,我会收到错误消息{{1}在远程仓库中找不到。 所以要解决这个问题,我已将module1.jar添加到maven-install-plugin的pom文件中,如下所示:

Module1

每当我发表评论 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.1</version> <configuration> <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file> <!-- <packaging>jar</packaging> --> </configuration> <executions> <execution> <id>install</id> <phase>compile</phase> <goals> <goal>install</goal> </goals> </execution> </executions> 时,它都会尝试将<packaging>jar</packaging> jar文件作为Module1文件安装到本地存储库中(我猜测默认情况下它会从POM文件中获取包装) 。所以我得到这样的东西:

war

但是,如果我取消评论[INFO] [INFO] [jar:jar {execution: creation}] [INFO] [INFO] Building jar: ${project.build.directory}/${project.artifactId}-${project.version}.jar [INFO] [INFO] [install:install {execution: install}] [INFO] [INFO] Installing ${project.build.directory}/${project.artifactId}-${project.version}.jar to <.m2_local_repo>/<proper_path>/${project.version}/${project.artifactId}-${project.version}.war ,它会抱怨我试图设置一个只读属性。

所以我有这个问题,如何在构建期间将<packaging>jar</packaging>文件安装到我的本地仓库?

使用jarmodule1 pom文件的某些部分更新问题:

module2 pom部分:

module2

...

<parent>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>1.01-SNAPSHOT</version>
</parent>
<artifactId>module2</artifactId>
<version>1.08-SNAPSHOT</version>
<packaging>war</packaging>

<dependency> <groupId>...</groupId> <artifactId>module1</artifactId> <version>4.18-SNAPSHOT</version> <scope>compile</scope> </dependency> pom:

module1

我添加了安装插件,以确保<parent> <groupId>...</groupId> <artifactId>...</artifactId> <version>1.01-SNAPSHOT</version> </parent> <artifactId>module1</artifactId> <version>4.18-SNAPSHOT</version> <packaging>war</packaging> 将在本地安装,以便module1.4.18.jar能够使用module2.0.18.war

2 个答案:

答案 0 :(得分:0)

我认为您的项目配置错误(不是以maven方式)。正确的配置如下所示

* parent (root)
    * module1 (war1)
    * module2 (war2)
    * jar (shared code from war2)

将您的代码从战争移动到单独的模块,并将此模块作为depdency添加到两个war模块。

答案 1 :(得分:0)

最终我选择<goal>install-file</goal>代替<goal>install</goal> 通过这种方式,我可以指定正确的包装(事实证明,packaging目标上的install是只读的,但您可以覆盖install-file}

所以这就是我最终的结果:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
        <version>2.5.1</version>
        <executions>
            <execution>
                <id>install</id>
                <phase>compile</phase>
                <goals>
                    <goal>install-file</goal>
                </goals>
            <configuration>
                <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file>
                <packaging>jar</packaging>
            </configuration>
            </execution>
        </executions>
    </plugin>

@MariuszS和@ WIll-感谢您对此事的见解