在我的maven项目中,我使用如下所示的自定义外部my-custom-external
jar:
pom.xml
<dependencies>
<dependency>
<groupId>com.myproject</groupId>
<artifactId>my-custom-external</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/my-custom-external-1.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>${kotlin.version}</version>
</dependency>
我成功构建了mvn verify
项目,但在控制台中我发出了警告:
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.myproject:prj_1:jar:1.0-SNAPSHOT
[WARNING] 'dependencies.dependency.systemPath' for com.myproject:my-custom-extneral:jar should not point at files within the project directory, ${project.basedir}/libs/my-custom-extneral-1.0-SNAPSHOT.jar will be unresolvable by dependent projects @ line 62, column 25
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
答案 0 :(得分:3)
我来到这里是因为我遇到了类似的问题。基于 this answer by Prasann,我认为我有一个可行的解决方案,可以解决大多数问题。如果我错了,请随时纠正我。
CheckSum 相关步骤的功劳:Casey Jordan
在开发过程中,安装本地外部 jar。
为此,请运行以下命令
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar -DcreateChecksum=true
<
和 >
中的字段(包括 <
和 >
)需要替换为实际值。
重命名生成的 maven-metadata-local
文件以删除 local
部分。
将这个 jar 文件的整个文件夹(我称之为安装文件夹)从您的本地 Maven 存储库复制到您项目的 {{1} } 文件夹。您需要从 Maven 存储库的根目录维护文件夹结构。
例如,如果您安装文件夹的绝对路径是lib
,那么您的项目lib文件夹也应该看起来像C:\Users\so_user\.m2\repository\my_group_id\my_artifact_id\
。
还要注意的是,
${project.basedir}\lib\my_group_id\my_artifact_id\
在这一点上与第 2 点中的 my_group_id
相同。只需将任何句点 (.) 替换为斜杠 (\)。
<group-id>
在这一点上与第 2 点中的 my_artifact_id
相同。对此无需更改。
在您的 <artifact-id>
文件中,通过添加以下几行来创建本地存储库:
pom.xml
<repositories>
<repository>
<id>any_name</id>
<name>Any Name</name>
<url>file://[path-to-lib-folder]</url>
</repository>
</repositories>
和 id
选择任何名称。name
替换为实际文件夹路径。您可以在此处使用 [path-to-lib-folder]
或 ${project.basedir}
。不会弹出警告。像往常一样向外部 jar 添加依赖项。
${pom.basedir}
用点 #1 的实际值替换 <dependencies>
<dependency>
<groupId>[group-id]</groupId>
<artifactId>[artifact-id]</artifactId>
<version>[version]</version>
</dependency>
</dependencies>
、[group-id]
和 [artifact-id]
。
因为您在项目 [version]
文件夹中提供了整个安装文件夹,所以当您将此项目转移到新系统时,无需再次运行 lib
。
答案 1 :(得分:2)
这只是一个警告,您可以这样做,只要它仅在该项目中使用,因为从属项目将看不到它。
您可以考虑以下两种选择来正确完成操作
如果要从项目中引用它,请如下所示将项目libs
文件夹添加为存储库
<repositories>
<repository>
<id>localrepository</id>
<url>file://${project.basedir}/libs</url>
</repository>
.
.
.
.
</repositories>
希望这会有所帮助
答案 2 :(得分:-1)
您可以使用$ {pom.basedir}代替$ {project.basedir}