首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用maven编译特定的依赖项

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

Stack Overflow用户
提问于 2019-11-14 13:17:15
回答 1查看 307关注 0票数 0

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

  1. 项目-bpm-过程<-父项目
  2. 项目-odata-服务-<依赖项>
  3. 项目-核心-服务-<依赖>

我不能把它们作为子模块,因为它们不是我这个项目的真正模块,它们只是依赖关系。因此,字面上的组-id在完全意义上并不匹配(有部分匹配,但在任何方面都没有帮助)。

更新1:

尝试了马克建议的备选方案2。我在下面看到错误,它表明子模块(聚合的项目)在父项目的文件夹下找不到。

处理POMs时遇到一些问题: ERROR子模块E:\STS-Workspaces\default-workspace\project-bpm-process-artificial\project-core-service of E:\STS-Workspaces\default-workspace\project-bpm-process-artificial\pom.xml不存在@ 错误子模块E:\STS-Workspaces\default-workspace\project-bpm-process-artificial\project-odata-service of E:\STS-Workspaces\default-workspace\project-bpm-process-artificial\pom.xml不存在@ 错误子模块E:\STS-Workspaces\default-workspace\project-bpm-process-artificial\project-bpm-process of E:\STS-Workspaces\default-workspace\project-bpm-process-artificial\pom.xml不存在@

我刚刚创建了一个带有打包"pom“类型的新maven项目,并将其他项目添加为模块。现在,“项目-bpm-过程-人工”已经成为我所说的所有三个项目的人工家长。

maven文档中,我看到路径是相对的。

更新2:

实际pom的位置位于:*E:\STS-Workspaces\default-workspace\project-bpm-process-artificial*

但是其他引用的项目在*C:\Users\ramgo\git* *E:\git-repos*中。这些项目被导入eclipse进行开发。

pom.xml在这里:

代码语言:javascript
复制
<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分钟。这是一个方便的参考。

代码语言:javascript
复制
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似乎很有趣,但不可行。链接不工作,也无法引用子模块的绝对路径。

.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-14 13:46:23

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

所以,问题中的术语对我来说是误导的。如果您有一些第三方(我假设有他们自己的pom.xml),但是您的项目是外部的,那么显然在您的项目中您无法管理它们。Maven不能构建外部的东西。

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

选项1

创建一个脚本,以便:

  • 输入依赖目录
  • 在该目录上运行mvn安装
  • 输入您的项目目录
  • 在您的项目上运行任何mvn

选项2

创建一个具有打包类型"pom“的”人工“pom.xml,并将您的项目和依赖项作为子模块列出(您的项目和依赖项将是对等的):

代码语言:javascript
复制
 |__some_folder
    |__pom.xml
    |__dependency1
    |  |__pom.xml
    |__dependency2
    |  |__pom.xml
    |__your-project
       |__pom.xml

在这种情况下,您将能够像使用一个项目那样对两个项目源进行操作,并且可以使用以下内容:

代码语言:javascript
复制
cd some_folder 
mvn clean install --projects <your-project> --also-make

这样,如果您的项目在其他模块中有依赖项,它们也将被构建。

我可能会选择第二个选择,但这真的是你的选择。

基于您提供的信息的更新1

  1. 不要真的指望eclipse,在这一点上它并不是真正相关的。您应该尝试在命令行中运行maven。一旦你做好了一切,日食就会跟着你的脚走。
  2. 如果您将“人工”pom放置到E:\STS-Workspaces\default-workspace\project-bpm-process-artificial中,那么所有模块都应该位于子文件夹中:
代码语言:javascript
复制
     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 

在此之后,您可以做以下检查:

代码语言:javascript
复制
cd E:\STS-Workspaces\default-workspace\project-bpm-process-artificial
mvn clean install

它应该编译所有库和项目,如果您想构建项目(假设它称为project-bpm-process),那么您可以从同一个文件夹中编译:

代码语言:javascript
复制
mvn clean install --projects project-bpm-process --also-make 

如果它依赖于project-core-service,但不依赖于project-data-service,那么只有project-core-service才会被重建。

现在,如果将maven排序,则可以在任何其他文件夹中添加eclipse工作区。由于我是IntelliJ用户,所以我对eclipse的评论不多。在intelliJ中,您只需导入这个人工pom,它就会自动识别所有的项目。在eclipse中,我认为它应该类似地工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58857736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档