0

我的多项目 Maven 项目有一些问题。

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

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

module2取决于哪里module1

Module1打包为war,它还会生成依赖的jar文件。module2只要更改仅在即已在远程存储库中,一切都很好module2module1.jar但是每当两个模块中都有更改时,mvn clean release:clean release:prepare release:perform我都会收到一条错误消息,指出module1.jar无法在远程存储库中找到。所以要解决这个问题,我已经像这样添加maven-install-pluginModule1's pom 文件中:

                <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>它时,它都会尝试将Module1jar 文件作为war文件安装到本地 repo 中(我猜默认情况下它会从 POM 文件中获取打包)。所以我得到这样的东西:

[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>它会抱怨我正在尝试设置只读属性。

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

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

module2pom部分:

<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>

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能够使用module1.4.18.jar

4

2 回答 2

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- 感谢您对此事的见解

于 2013-11-15T00:26:31.580 回答
0

我认为您的项目配置错误(不是以 Maven 方式)。正确的配置看起来像这样

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

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

于 2013-11-14T22:21:12.230 回答