如何使用Maven编译特定的依赖项

时间:2019-11-14 13:17:15

标签: maven

我遇到一种情况,需要清理并安装我的Maven项目的几个依赖项。当我从事这个项目时,我正在对这些依赖项进行更改,并且必须为我所做的每个小更改手动清理和安装。我试图找到一个使我的生活变得轻松的maven命令。

  1. project-bpm-process <-父项目
  2. project-odata-service-<依赖项>
  3. 项目核心服务-<依赖关系>

我不能将它们作为子模块,因为它们并不是本项目的真正模块,它们只是依赖项。因此,从字面上看,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似乎很有趣,但就我而言是不可行的。链接无效,无法引用子模块的绝对路径。

.....

1 个答案:

答案 0 :(得分:0)

Maven依赖的概念假定该工件是在外部构建的(甚至不一定是使用maven构建的),并且可以作为第三方jar用于项目。

因此,问题中的术语误导了我。 如果您有一些第三方(我假设有他们自己的pom.xml),但是在您的项目外部,那么显然在您的项目中您将无法管理它们。 Maven无法构建外部内容。

因此,基于这些假设,选择是:

选项1

创建一个脚本,将:

  • 输入依赖关系目录
  • 在该目录上运行mvn install
  • 输入您的项目目录
  • 在项目中运行mvn

选项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 根据您提供的信息:

  1. 不是真的要指望月食,在这一点上它并不重要。您应该尝试从命令行运行maven应该起作用。完成所有正确操作后,日食将跟随您的情绪。

  2. 如果将“人造” 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,它将自动识别所有项目。在月食中,我认为它应该也可以工作