Maven本地存储库根本不适用于第三方jar

时间:2012-09-28 19:24:48

标签: maven maven-2 maven-3

我是这个maven的新手,我在本地存储库遇到了大问题。

我想添加第三方jar,与此相关的是我有类似的东西:

        <dependency>
            <groupId>com.thirdParty</groupId>
            <artifactId>thirdParty</artifactId>
            <version>4.0.2</version>
            <scope>system</scope>
            <systemPath>${basedir}/lib/thirdParty_4_0_2/thirdParty.jar</systemPath>
        </dependency>

它工作得很棒,但我收到了一些警告,我想删除这个警告。

[WARNING] Some problems were encountered while building the effective model for com.thirdParty.connector:thirdParty:mule-module:1.0
[WARNING] 'dependencies.dependency.systemPath' for com.thirdParty:thirdParty:jar should not point at files within the project directory, ${basedir}/lib/thirdParty_java_client_4_0_2/thirdParty.jar will be unresolvable by dependent projects @ line 239, column 20

所以我没有这样做,而是听说我可以拥有一个maven本地存储库并在那里添加我的所有第三方jar,然后在我的XML中添加一个存储库,然后调用它们。

所以我有类似的东西:

    <repository>
        <id>local-maven-repository</id>
        <name>local-maven-repository</name>
        <releases>
            <enabled>true</enabled>
            <checksumPolicy>ignore</checksumPolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>file://${project.basedir}/../../local-maven-repository</url>
    </repository>

在本地maven-repository内部我有类似的东西:

local-maven-repository
|-- com 
|   |-- thirdparty
|       |-- sdk
|           | -- 4.0.0
|                | thirdParty-4.0.0.jar
|                | thirdParty-4.0.0.pom

我收到了这个错误。

[ERROR] Failed to execute goal on project thirdParty: Could not resolve dependencies for project com.thirdParty.connector:thirdParty:mule-module:1.0: Failure to find com.thirdParty:thirdParty:jar:4.0.2 in file:///Users/moises.vega/Developer/Telstra/telstra-thunder/connectors/thirdParty/../../local-maven-repository was cached in the local repository, resolution will not be reattempted until the update interval of local-maven-repository has elapsed or updates are forced -> [Help 1]

有人能指出我正确的方向来解决这个问题吗?

感谢。

2 个答案:

答案 0 :(得分:1)

不要使用系统依赖项。不要尝试在磁盘中创建存储库。

如果你需要一些不在Maven中心的东西,那么(最好)部署Nexus或Archiva或Artifactory并在那里部署它。如果你不能这样做,请将它放在〜/ .m2 / repository中,安装:install-file。

答案 1 :(得分:0)

从maven良好实践的角度来看,这两种解决方案都很糟糕。

就个人而言,我会使用您提到的第一个解决方案,并接受警告。 Maven抱怨(由于某种原因)如果你有一个依赖项目,该项目将无法找到jar文件,因为$ {project.basedir}将解析到另一个目录。这将适用于这两种解决方案,即使您设法完成第二项工作。

如果您没有本地maven存储库(例如nexus或ar​​tifactory),我认为第二个最佳解决方案可能是编写运行mvn install:install-file的脚本,如作为构建过程的一部分,您需要运行该脚本,然后运行任何maven命令。 这也可以从pom文件中完成,但它有点棘手,需要更多设置。您需要一个多模块项目,并且要运行的第一个模块应运行安装插件,以安装jar。您可以通过使所有其他子模块依赖于安装依赖项的模块来实现此目的。