我的多项目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>
文件安装到我的本地仓库?
使用jar
和module1
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
答案 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-感谢您对此事的见解