Maven的:包括JAR在公共仓库未发现Maven的:包括JAR在公共仓库未发现(Maven: In

2019-05-12 23:23发布

如果我是使用第三方库,它是不是在Maven的公共仓库,什么是它作为我的项目的依赖,这样,当别人检查出来我的代码,它仍然能够打造最好的方法是什么?

我的应用“A”依赖于罐子“B”,它不会在公共仓库存在。 但是,我想补充“B”作为一个依赖于“A”,这样当上了世界的另一端的人可以检查出的代码,仍然能够建立“A”

Answer 1:

您可以自己安装的项目。

或者你也可以使用system范围如下所示:

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPath要求该项目的绝对路径。 为了更方便,如果jar文件是存储库/项目中,你可以使用${basedir}属性,它绑定到项目的根。



Answer 2:

如果你有一个模块是在这种情况下,一个父项目(需要依赖不是一个仓库),您可以设置要使用exec-的maven-plugin插件到你的父项目自动安装的相关文件。 例如,我曾与authorize.net jar文件要做到这一点,因为它是不公开的。

父POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

在上面的例子中,罐子的位置是在“服务”模块的lib文件夹。

业务模块进入验证阶段的时候,罐子会在当地的仓库中。 只需在您设置GROUPID,神器等在父POM的方式引用它。 例如:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>


Answer 3:

使用系统范围可以工作,但它甚至没有Maven的规范建议。 它是不可移植。

从Maven的书:

系统 - 该系统范围相似,除了你必须提供到本地文件系统上的JAR的显式路径来提供。 这是为了允许对可能是系统库的一部分本地对象编译。 神器假定始终可用,并在资源库中没有抬起头来。 如果声明的范围是系统的,你还必须提供Systempath下元素。 请注意,不建议使用此范围(你应该总是尝试引用在公共或定制的Maven仓库的依赖)。

最好的办法是将其安装到你的本地库或您的企业资源库是所有您同行访问。

这是很容易的,如果你正在使用一个仓库管理等的Nexus。



Answer 4:

一般来说,你应该首先把第三方的jar到本地存储库。 在此之后,你可以通过添加依赖到pom.xml中使用它。

例如。

第一1.put罐子到你的本地库:

mvn install:install-file -Dfile=<path-to-file>

注:该命令要求Maven的安装插件版本2.5或更高版本。 如果没有,你可以参考这里

通过将依赖到你项目的pom.xml观点original ideas罐子。
只需添加到您的项目的pom.xml这样的:

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

然后3.you可以打包或通过运行部署项目mvn packagemvn deploy

第三方罐子也将包含在包中。



Answer 5:

如果您在使用Groovy /圣杯工具套件(GGTS),那么你可以直接导入第三方的依赖(但要确保你有你的本地仓库第三方的依赖),使用下面的步骤:

  1. 转至Project Explorer中右键单击项目。
  2. 点击导入选项。
  3. 花费Maven的选项,并选择安装或部署神器Maven仓库 ,然后单击下一步。
  4. 眉毛,并选择第三方依赖使用神器文件选项,并使用pom.xml文件输入组ID,工件ID和版本的细节并单击Finish

等待某个时刻,可能误差会去为那个问题。



文章来源: Maven: Including jar not found in public repository