我遇到一种情况,需要清理并安装我的Maven项目的几个依赖项。当我从事这个项目时,我正在对这些依赖项进行更改,并且必须为我所做的每个小更改手动清理和安装。我试图找到一个使我的生活变得轻松的maven命令。
我不能将它们作为子模块,因为它们并不是本项目的真正模块,它们只是依赖项。因此,从字面上看,group-id并不完全匹配(存在部分匹配,但无济于事)。
更新1:
尝试了Mark建议的选项2。我看到以下错误,指示在父项目的文件夹下找不到子模块(聚合项目)。
[错误] [错误]处理 POM:[错误]子模块 E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial \ project-core-service 的 E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial \ pom.xml 不存在@
[ERROR]子模块 E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial \ project-odata-service 的 E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial \ pom.xml 不存在@
[ERROR]子模块 E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial \ project-bpm-process 的 E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial \ pom.xml 不存在@
我刚刚创建了一个新的maven项目,打包了“ pom”类型,并将其他项目添加为模块。现在,“ project-bpm-process-artificial”已成为我所谈论的所有三个项目的人造父项。
从maven documentation,我发现路径是相对的。
更新2:
实际pom的位置位于:* E:\ STS-Workspaces \ default-workspace \ project-bpm-process-artificial *
但是其他引用的项目在* C:\ Users \ ramgo \ git * 和 * E:\ git-repos *中。这些项目被导入到Eclipse中进行开发。
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>
<groupId>com.mycompany</groupId>
<artifactId>project-bpm-process-artificial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>project-bpm-process-artificial</name>
<url>http://maven.apache.org</url>
<modules>
<module>project-core-service</module>
<module>project-odata-service</module>
<module>project-bpm-process</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
解决方案:出于所有实际原因,我发现选项1易于实现(Marks提供的选项1)。编写批处理脚本几乎不需要5分钟。这是一个方便参考的东西。
set core=<directory_path_of_core_project>
set module_one=<<directory_path_of_module_one>>
set module_two=<<directory_path_of_module_two>>
cd %core%
call mvn clean install
cd %module_one%
call mvn clean install
cd %module_two%
call mvn clean install
选项2似乎很有趣,但就我而言是不可行的。链接无效,无法引用子模块的绝对路径。
.....
答案 0 :(得分:0)
Maven依赖的概念假定该工件是在外部构建的(甚至不一定是使用maven构建的),并且可以作为第三方jar用于项目。
因此,问题中的术语误导了我。 如果您有一些第三方(我假设有他们自己的pom.xml),但是在您的项目外部,那么显然在您的项目中您将无法管理它们。 Maven无法构建外部内容。
因此,基于这些假设,选择是:
选项1
创建一个脚本,将:
选项2
创建一个“人造” pom.xml,其包装类型为“ pom”,并将您的项目和依赖项作为子模块列出(您的项目和依赖项将是对等的):
|__some_folder
|__pom.xml
|__dependency1
| |__pom.xml
|__dependency2
| |__pom.xml
|__your-project
|__pom.xml
在这种情况下,您将可以像处理一个项目一样使用两个项目源,并且可以使用以下内容:
cd some_folder
mvn clean install --projects <your-project> --also-make
因此,如果您的项目在其他模块中具有依赖项,那么它们也将被构建
我可能会选择第二种选择,但实际上是您的选择
更新1 根据您提供的信息:
不是真的要指望月食,在这一点上它并不重要。您应该尝试从命令行运行maven应该起作用。完成所有正确操作后,日食将跟随您的情绪。
如果将“人造” pom放在E:\STS-Workspaces\default-workspace\project-bpm-process-artificial
中,则所有模块都应位于子文件夹中:
E:\
|_ STS-Workspaces
|_ default-workspace
|_ project-bpm-processes-artificial
|_ project-core-service
| |_pom.xml of that module
| |_.git // it can be a root of git repo
| |_src
|_ project-odata-service
| ...
|_ project-bpm-process
之后,您可以进行以下检查:
cd E:\STS-Workspaces\default-workspace\project-bpm-process-artificial
mvn clean install
它应该编译所有库和您的项目
然后,如果您要构建项目(假设其名为project-bpm-process
),则可以在同一文件夹中进行操作:
mvn clean install --projects project-bpm-process --also-make
如果它依赖于project-core-service
,但不依赖于project-data-service
,那么将仅重建project-core-service
现在,当行家整理出来时,可以在其他任何文件夹中添加Eclipse工作区。因为我是IntelliJ用户,所以我对Eclipse的评价不高。在智能中,您只需导入此人造pom,它将自动识别所有项目。在月食中,我认为它应该也可以工作