1

我是这个 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>

在 local-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]

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

谢谢。

4

2 回答 2

1

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

如果您需要的东西不在 Maven 中心,那么(最好)部署 Nexus 或 Archiva 或 Artifactory 并将其部署在那里。如果您不能这样做,请将其放入 ~/.m2/repository 和 install:install-file。

于 2012-09-28T19:30:45.723 回答
0

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

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

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

于 2012-09-28T19:39:05.580 回答