【问题标题】:How to use an entire Java project inside another Java project and instantiate and use classes and methods?如何在另一个 Java 项目中使用整个 Java 项目并实例化和使用类和方法?
【发布时间】:2020-08-07 08:23:28
【问题描述】:

我遇到了一种情况,我有一个包含多个类和方法的 maven 项目......我需要在需要它们的其他项目中拥有相同的项目类和方法。

在阅读了一些关于 Git 子模块、Git 子树以及其他实现这一点的方法之后。我决定导出一个带有其依赖项的 Jar 文件,并将其复制到“${basedir}/lib/”子目录中的所有其他项目中。这样我就可以让我的 QA 团队中的所有开发人员保持足够简单(我们不是很有经验的开发人员,因为我们来自 QA 世界),而且我可以控制他们所有人在所有项目中都使用相同的库。

我使用程序集 maven 插件导出到 Jar 文件,在第一个 repo 中将其添加到我的 POM 文件中:

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </plugin>

然后运行

$ mvn clean compile assembly:single

我在“目标”目录中有 Jar 文件,我将其复制到所有其他存储库。在每个 repo 的“lib”目录中。

然后在其他 repos 的 POM 文件中,我添加到他们的 POM 依赖项部分:

<dependency>
    <groupId>myDep</groupId>
    <artifactId>myDep</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/myDep-1.0-SNAPSHOT-jar-with-dependencies.jar</systemPath>
</dependency>

问题是我无法弄清楚如何在我的类中导入 Jar 以使用我需要从这个导入的 Jar 中使用的方法。正如我试图导入一样

import myDep.* 

但它不起作用。

你能指出我正确的方向吗?非常感谢!

【问题讨论】:

标签: java maven jar maven-assembly-plugin


【解决方案1】:

通常,在开始使用 Maven 之前,您需要设置一些基础架构:

  1. 用于工件(罐子、战争等)的 Nexus 或 Artifactory 服务器

  2. 像 Jenkins 这样的构建服务器。

然后您使用mvn clean deploy 在 Jenkins 上构建您的 jars(没有任何类似 maven 程序集插件的东西)。然后它们在 Nexus/Artifactory 中可用。

如果开发人员有一个settings.xml 指向正确的 Nexus/Artifactory,那么他们可以添加

<dependency>
    <groupId>myDep</groupId>
    <artifactId>myDep</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

到他们的pom.xml,无需指定任何路径或复制任何内容。然后,Maven 会神奇地解决来自 Nexus/Artifactory 的依赖关系。

【讨论】:

  • 在我们的情况下,我们现在只使用 Jenkins,不像 CD/CI 工具,而更像是“使用 Cron 运行自动化测试”工具。而且我们更喜欢“靠自己”学习,并且在有限的发展知识和时间的情况下。所以我们需要“继续运行”是在另一个项目中使用这个项目,只是作为一种解决方法,让相同的 utils 类在多个测试代码仓库中重复
  • 那么,您是否直接从 MavenCentral 获取外部依赖项?
  • 另一个“实用”的解决方案是使用该库的每个人都从 git 中签出代码并在其上运行 mvn clean install。然后,同一帐户上的任何其他项目都可以直接引用该库,而无需复制它或使用系统路径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2011-07-17
相关资源
最近更新 更多