【问题标题】:Setting maven to have a framework and other projects that use it设置 maven 以拥有一个框架和其他使用它的项目
【发布时间】:2020-06-10 11:39:42
【问题描述】:

我创建了一个 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>SeleniumJavaFramework</groupId>
    <artifactId>SeleniumJavaFramework</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>7</maven.compiler.source>
        <maven.compiler.target>7</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0-alpha-6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.testng/testng -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.1.0</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>compile</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aventstack/extentreports -->
        <dependency>
            <groupId>com.aventstack</groupId>
            <artifactId>extentreports</artifactId>
            <version>4.1.6</version>
            <scope>compile</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
    </dependencies>
</project>

我想创建与框架项目分开的其他 Maven 项目,它们将拥有自己的 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>RicercaGoogle</groupId>
    <artifactId>RicercaGoogle</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>TestOne</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>7</maven.compiler.source>
        <maven.compiler.target>7</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>SeleniumJavaFramework</groupId>
            <artifactId>SeleniumJavaFramework</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>system</scope>
            <systemPath>patofmyjar.jar</systemPath>
        </dependency>
    </dependencies>
</project>

不幸的是,我不知道从哪里开始 maven 设置。我什至不确定 pom 文件是否正确。我只知道我不能简单地将jar依赖放入测试项目并运行它。你能帮帮我吗?

谢谢

【问题讨论】:

  • 认为您正在寻找的是一个父 POM。我会注意到配置(尤其是 Java 7)严重过时,建议在继续之前进行现代化改造。
  • 你能帮我处理父 POM 吗?

标签: java maven testing dependencies


【解决方案1】:

如果您在单个项目中工作,则可以创建一个父 pom,其中包含您的 TestOne 应用程序和框架作为两个模块,因此您将拥有 3 个 pom(搜索 maven 多模块项目)。如果您的框架是不同项目的库,您需要一个存储库(即nexus),您的框架可以部署到其中。然后可以在其他项目中作为依赖使用(Framework的依赖会自动包含在内)

【讨论】:

  • 如果你的框架是不同项目的库:是的,但目前我没有存储库,所以它必须是一个 jar 文件。
  • 如果Framework是一个库,那么做一个父pom是没有意义的。在框架项目上执行“mvn install”以将其存储在本地存储库 (/.m2) 中。然后 TestOne 项目可以将其视为依赖项。粗略地说,这仅适用于您的机器。
  • 我按照你说的做了,我在目标文件夹中有一个 jar,但是测试项目也无法检测到框架类
  • 查看本地仓库:/.m2/repository/SeleniumJavaFramework/SeleniumJavaFramework/0.0.1-SNAPSHOT
  • 并从依赖项中删除 标签
【解决方案2】:

我建议按照 maven 官方指南学习如何在 maven 中进行继承,并根据您的逻辑进行调整:

http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

【讨论】:

  • 这更像是一个评论而不是一个答案。
  • 可能你是对的,但是当用户要求一种方法来继承依赖关系时,这就是方法,所以自己回答
  • 谢谢,幸运的是我解决了这个问题。这种项目我不需要父 pom,我只需要更改类目录。
【解决方案3】:

问题是我的课程在错误的文件夹中。 他们在src/test/java,而他们必须在src/main/java。 同样在测试项目 pom 中,我按照 Andrew Fomin 的建议删除了范围和 systemPath

<dependency>
            <groupId>SeleniumJavaFramework</groupId>
            <artifactId>SeleniumJavaFramework</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

我有一个错误

Missing artifact SeleniumJavaFramework:SeleniumJavaFramework:jar:0.1.1-SNAPSHOT

因为如您所见,版本错误。

谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2011-02-23
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多