maven-2 - poms 中的 Maven 重用

标签 maven-2 import reusability

在我们的 Maven 项目中,我们正在尝试以下目录结构(总共大约 80 个项目,只显示了几个以便您理解):

myappli      (pom)
-- module1       (pom)
--|-- utils    (pom)
--|-- ejb       (pom)
--|--|-- myappli-module1-a-ejb    (jar)
--|--|-- myappli-module1-b-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)
...
-- module6       (pom)
--|-- utils       (pom)
--|-- ejb       (pom)
--|--|-- myappli-module6-c-ejb    (jar)
--|-- war       (pom)
--|-- applet       (pom)

Note: This is a flat structure for Maven, as all non-leaf projects have a packaging value of "pom". (cf BetterBuildsWithMaven book).



我们在“dependencyManagement”中定义依赖版本,在“myappli”pom 中。这工作正常。

我们的问题是重用依赖本身 .
例如,ejb 依赖项对所有 ejb 项目都是通用的(按设计)。
我们不想剪切粘贴,并在每次更改时保持所有这些!

我们正在考虑为 ejb 依赖项使用一些“ 导入概念 ”,并在应用程序级别定义我们的 ejb 依赖项一次。我们不成功的尝试是:
  • Maven“parent pom”的概念很好,但它已经被模块使用,所以它不能满足我们的要求。
  • 在 Maven 中找不到导入工具(dependencyManagement 除外)
  • 无法识别 XML 实体定义。我们尝试了如下的 pom,并得到了错误
    Reason: Parse error reading POM. Reason: could not resolve entity named 'ejbDependencies'”:
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE project [ <!ENTITY ejbDependencies SYSTEM "./ejbDependencies.txt">]><project ......&ejbDependencies;...


  • 已编辑 :我正在尝试罗伯特建议的解决方案,但出现了问题。

    当我编译我的 ejb 项目时,它本身并没有找到依赖项。编译(mvn compile)时出现错误,说 javax.ejb 包丢失。

    Note: I did run "mvn install" on the dependencies project before.



    这是我的配置:
    <project ...>
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>com.company</groupId>
        <artifactId>myproj-maven</artifactId>
        <version>3.1-SNAPSHOT</version>
      </parent>
    
      <groupId>com.company</groupId>
      <artifactId>myproj-maven-ejb</artifactId>
      <version>${myproj-version}</version>
      <packaging>pom</packaging>
    
      <dependencies>
        <dependency>
          <groupId>javax.ejb</groupId>
          <artifactId>ejb</artifactId>
        </dependency>
    
        <dependency>
          <groupId>ojdbc</groupId>
          <artifactId>ojdbc</artifactId>
        </dependency>
      </dependencies>
    </project>
    
    ---------------------------------
    <project ...>
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>com.company</groupId>
        <artifactId>myproj-identite-ejb</artifactId>
        <version>3.1-SNAPSHOT</version>
      </parent>
    
      <groupId>com.company</groupId>
      <artifactId>myproj-identite-metier</artifactId>
      <name>SNR IDENTITE METIER</name>
      <version>2.0.1</version>
      <packaging>ejb</packaging>
    
      <dependencies>
        <dependency>
          <groupId>com.company</groupId>
          <artifactId>myproj-maven-ejb</artifactId>
          <version>${myproj-version}</version>
          <type>pom</type>
        </dependency>
      </dependencies>
    </project>
    

    我不知道它是否会改变某些东西,但我们有一个将两个 pom 关联起来的层次结构。
    我们有一个严格的 Maven 结构,每个目录都将所有子目录声明为 maven 模块,每个子目录都将父目录声明为 maven 父目录。
    而共同的父目录就是这个结构的一部分。
    +---maven
    |   \---ejb
    +---identite
    |   +---ejb
    |   |   \---SNR_IDENTITE_METIER
    

    已编辑 :

    礁石给出的答案似乎是正确的。使用 Maven 是不可能的,因为提供了我们的依赖项,因此不具有传递性 :-(

    We really have many problems with setup up Maven. So many little things just don't work. Today I found out that the site target cannot handle properties, that we are using for version numbers!

    最佳答案

    您可以使用 pom 依赖项将依赖项导入任意项目。

    一个 pom 项目可能类似于:

    <project>
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.example</groupId>
      <artifactId>persistence-deps</artifactId>
      <version>1.0</version>
      <packaging>pom</packaging>
    
      <dependencies>
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate</artifactId>
          <version>${hibernateVersion}</version>
        </dependency>
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-annotations</artifactId>
          <version>${hibernateAnnotationsVersion}</version>
        </dependency>
      </dependencies>
    </project>
    

    并导入为:
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>persistence-deps</artifactId>
      <version>1.0</version>
      <type>pom</type>
    </dependency>
    

    Maven, the definitive guide - Grouping Dependencies 详情。

    关于maven-2 - poms 中的 Maven 重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1366535/

    相关文章:

    java - 指定属性文件的 Java 路径

    python - 奇怪的 PYTHONPATH 问题

    Python:从 Web 界面运行时导入其他 python 文件

    uitableview - TableView 单元格重用和不需要的复选标记 - 这让我很伤心

    iphone - 重用 NSURLConnection 实例

    使用 SDWebImage 4.3.0 快速 tableview 加载图像

    java - org.apache.thrift7.TBase 与 org.apache.thrift.TBase

    java - 集成 Maven 报告插件

    java - mvn tomcat :run doesn't start Tomcat

    mysql - 通过php将csv导入mysql第一行有0