2

我正在使用带有 m2e 的 Eclipse Indigo(它连接到 Maven 3.0.3 的外部二进制文件)。

现在,我的应用程序的预期结构如下:

Company-parent
--Project-parent
----Module1
----Module2
----ModuleN

我设置了我的 pom,使得 Company-parent 是 Project-parent 的项目,而 Project-parent 是所有模块的父级。公司母公司和项目母公司似乎没问题。两者都是包装类型 POM。

第三个层次是我开始遇到问题的地方。即使定义了最简单的模块项目,我也会遇到各种 Maven 错误和各种奇怪的行为。

公司母公司:

<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.scoresecret</groupId>
  <artifactId>scs-global-parent</artifactId>
  <version>1</version>
  <packaging>pom</packaging>

</project>

项目父:

<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>

  <parent>
    <artifactId>scs-global-parent</artifactId>
    <groupId>com.scoresecret</groupId>
    <version>1</version>
  </parent>

  <artifactId>scs-model-parent</artifactId>
  <groupId>com.scoresecret.model</groupId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <modules>
    <module>scs-model-core</module>
  </modules>

</project>

模块pom:

<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>

  <parent>
    <artifactId>scs-model-parent</artifactId>
    <groupId>com.scoresecret.model</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>scs-model-core</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>jar</packaging>

我不能做“Maven -> 更新项目配置”,因为当我这样做的时候,我得到了这个错误:

Failure to find org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3 in https://my.archiva.location/archiva/repository/internal was cached in the local repository, resolution will not be reattempted until the update interval of scs.internal has elapsed or updates are forced pom.xml /scs-model-core line 1  Maven Configuration Problem

我收到的其他一些错误:

Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.4.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-resources-plugin:jar:2.4.3 pom.xml /scs-model-core line 1  Maven Build Problem

还收到有关 m2e 忽略模块中我的插件目标之一(来自公司级别的 pom)的错误。我在这里遗漏了一些明显的东西吗?帮助!

谢谢 :)

4

4 回答 4

3

您不应该像您在目录结构中描述的那样放置工件。

+-- Company-parent (pom.xml)
      +-- Project-parent (pom.xml)
            +----Module1 (pom.xml)
            +----Module2 (pom.xml)
            +----ModuleN (pom.xml)

为了真正充分利用您的公司父级 (pom.xml),应该将其放入版本控制中的一个单独区域,并在您的存储库管理器(nexus、artifactory、archiva...)中单独发布。这将导致以下结构:

+-- Company-parent (pom.xml) (Separate Project)

公司母公司应根据需要通过发布插件经常发布。假设我们已经发布了公司母公司的 1.0 版。将其分开的原因是,公司-母公司被许多项目使用,而不仅仅是一个项目。

并且真正的项目应该放在一个单独的文件夹中(也在版本控制中):

+-- Project-parent (pom.xml)
     +----Module1 (pom.xml)
     +----Module2 (pom.xml)
     +----ModuleN (pom.xml)

因此,要在项目中使用 company-parent,project-parent 必须如下所示:

<project....>
 <modelVersion>4.0...</modelVersion>

<parent>
  <artifactId>company-parent</artifactId>
  <groupId>com.company.base</groupId>
  <version>1.0</version>
</parent>

<packaging>pom</packaging>

<groupId>com.company.project1</groupId>
<artifactId>project-parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
...
<dependencyManagement>
 <!-- Project specific dependencies -->
</dependencyManagement>
<build>
  <pluginManagement>
    <plugins>
      <!-- Project specific plugins. Better use them of the company pom -->
    </plugins>
  </pluginManagement>
</build>
<modules>
  <module>module1</module>
  <module>module2</module>
  <module>moduleN</module>
</modules>
..

现在让我们看一下应该如下所示的模块:

<project....>
 <modelVersion>4.0...</modelVersion>

<parent>
  <artifactId>project-parent</artifactId>
  <groupId>com.company.project1</groupId>
  <version>1.0.0-SNAPSHOT</version>
</parent>

<packaging>jar</packaging>

<artifactId>module1</artifactId>

<dependencies>...</dependencies>
<build>..</build>
于 2012-03-26T16:05:59.013 回答
0

您应该使用显式路径引用父 pom:

<parent>
  <artifactId>scs-model-parent</artifactId>
  <groupId>com.scoresecret.model</groupId>
  <version>1.0-SNAPSHOT</version>
  <relativePath>../pom.xml</relateivePath>
</parent>

否则,每次更改时都需要将父 pom 重新安装到存储库中。

于 2012-03-24T21:48:51.457 回答
0

听起来 maven 无法从存储库https://my.archiva.location/archiva/repository/internal下载插件(org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3)

https://my.archiva.location/archiva/repository/internal中找不到 org.apache.maven.plugins:maven-resources-plugin:pom:2.4.3失败缓存在本地仓库中,不会重新尝试解析直到 scs.internal 的更新间隔已过或强制更新 pom.xml /scs-model-core 第 1 行 Maven 配置问题

如果您在浏览器中浏览到此 URL,它是否存在?我看到它正在使用 https - 您是否需要客户端证书或某种形式的基本身份验证凭据才能访问此 url?

您在 .m2/settings.xml 中显示存储库的当前设置是什么?您是在公司防火墙后面还是未连接到迫使您连接到非标准 maven 中央存储库的互联网?

于 2012-03-24T21:57:05.333 回答
0

事实证明,我的本地存储库包含以扩展名“.lastUpdated”结尾的文件......这是因为我在尝试加密我的 Maven 密码时遇到了身份验证问题,所以它没有下载依赖项。我删除了这些文件并简单地运行“Maven > 更新依赖项”,它没有问题,从我的工件存储库下载缺少的资源。

于 2012-03-25T14:36:33.453 回答