0

我试图搜索现有问题,但找不到任何问题 - 感觉我的问题很简单,但可能是因为它非常具体,我无法在任何地方找到答案。

无论如何 - 我有 2 个 Maven 项目,其中第二个项目取决于/需要第一个类的某些类。在某些情况下,我希望依赖于 JAR 而不是项目依赖。

我通过使用 maven-jar-plugin 创建一个额外的 jar 解决了这个问题,其中包含了所需的类。jar 已正确创建并在 ${project.build.directory} 中输出。但是项目 A 的 pom 位于同一目录中,这对我和项目 B 来说都是痛苦的,原因是项目 A 中使用的依赖项。(有没有办法忽略位于 ${project. build.directory} ??? 喜欢:

<dependency>
            <groupId>projectA.groupId</groupId>
            <artifactId>A</artifactId>
            <version>1x-SNAPSHOT</version>
            <classifier>classes</classifier>
                    ->  <ignorePom>true</ignorePom>
        </dependency>

)。

现在我将系统范围用于依赖项,并在添加系统路径后正常工作。尽管在任何可能的地方都必须避免使用示波器系统。Systempath 让我很烦,因为这不是一个好习惯,而且因为绝对路径。

我知道我可以通过使用将创建的 jar 安装到存储库中

mvn 安装:安装文件

但我想尽可能地自动化这个过程,你有什么建议?

提前致谢

4

3 回答 3

1

最好的解决方案是使用存储库管理器并真正发布第一个 jar 并在您需要的地方建立真正的依赖关系。

根据您写的内容,我建议创建一个单独的 maven 项目,其中包含将由其他几个模块使用的类,然后发布它并简单地使用对该模块的依赖。这将彻底解决您的问题。

于 2012-05-23T14:48:34.933 回答
0

您是否阅读过任何有关Maven的文档?如果您有使用 Maven 定义的项目,那么您无需执行任何特殊操作即可使依赖项正常工作。

根据您的需要,您有两种选择:创建两个单独的项目,其中一个依赖于另一个,或者您可以创建一个多模块项目,其中一个模块仍然依赖于另一个。

两个独立的项目

.
 |-- A
 |   `-- pom.xml
 |   `-- src
 |       `-- main
 |           `-- java
 `-- B
     `-- pom.xml
     `-- src
         `-- main
             `-- java

A/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.company</groupId>
    <artifactId>A</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

B/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.company</groupId>
    <artifactId>B</artifactId>
    <version>2.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>A</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

而已!您依赖于 B 中的项目/模块 A。

mvn install您首先通过发布(并在目录 A 中)来构建项目 A。该工件将安装在您的本地存储库中(并可用于其他项目)。

然后你通过发布mvn install(并在目录 B 中)来构建项目 B。该工件将安装在您的本地存储库中。

一个带有子模块的父项目

.
 |-- A
 |   `-- pom.xml
 |   `-- src
 |       `-- main
 |           `-- java
 `-- B
 |   `-- pom.xml
 |   `-- src
 |       `-- main
 |           `-- java
 `-- pom.xml

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.company</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>A</module>
        <module>B</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.company</groupId>
                <artifactId>A</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

<depencdencyManagement/>可以帮助子模块选择正确的版本。

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

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

    <groupId>com.company</groupId>
    <artifactId>A</artifactId>

</project>

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

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

    <groupId>com.company</groupId>
    <artifactId>B</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>A</artifactId>
        </dependency>
    </dependencies>
</project>

使用此解决方案,您只需将自己定位在父文件夹中并运行mvn install(或mvn package类似)。您现在将以正确的顺序构建 A 和 B,并且整个项目可以导入到 Eclipse 中。

于 2012-06-05T08:52:45.340 回答
0

Maven 不支持“依赖 jars”。有“系统”的范围,但非常有限,可能会导致各种麻烦。如果你需要依赖一个 Jar,你需要给它分配一个唯一的 groupId 和 artifactId。如果您不想在 Maven 中构建它,您可以将其部署到本地 repo 管理器(甚至使用 mvn install:install-file 部署到本地 repo)。

取决于带有分类器“工作”但不是很好的罐子,因为反应器不能正确地将它们包含在多模块项目中。

于 2012-05-23T14:15:06.577 回答