在我的 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>
Run Code Online (Sandbox Code Playgroud)
我成功构建了我的项目,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]
Run Code Online (Sandbox Code Playgroud)
我到达这里是因为我遇到了类似的问题。根据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 存储库复制到项目的lib
文件夹中。您需要维护 Maven 存储库根目录的文件夹结构。
例如,如果您安装的文件夹的绝对路径是C:\Users\so_user\.m2\repository\my_group_id\my_artifact_id\
,那么您的项目 lib 文件夹也应该类似于${project.basedir}\lib\my_group_id\my_artifact_id\
。
另请注意,
my_group_id
<group-id>
这一点与#2 中的相同。只需将任何句点 (.) 替换为斜杠 (\)。
my_artifact_id
<artifact-id>
这一点与#2 中的相同。为此无需进行任何更改。
在您的pom.xml
文件中,通过添加以下行来创建本地存储库:
<repositories>
<repository>
<id>any_name</id>
<name>Any Name</name>
<url>file://[path-to-lib-folder]</url>
</repository>
</repositories>
Run Code Online (Sandbox Code Playgroud)
id
和选择任何名称name
。[path-to-lib-folder]
为实际文件夹路径。您可以在此处使用${project.basedir}
或${pom.basedir}
。不会弹出任何警告。照常向外部 jar 添加依赖项。
<dependencies>
<dependency>
<groupId>[group-id]</groupId>
<artifactId>[artifact-id]</artifactId>
<version>[version]</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
将[group-id]
,[artifact-id]
和替换[version]
为第 1 点的实际值。
由于您已在项目文件夹中提供了整个已安装的文件夹,因此当您将此项目转移到新系统时lib
无需再次运行。mvn install:install-file
这只是一个警告,你可以这样做,只要它只在这个项目中使用,因为它对依赖项目不可见。
您可以考虑以下两个选项以正确执行此操作
如果您想从您的项目中引用它,请将您的项目libs
文件夹添加为存储库,如下所示
<repositories>
<repository>
<id>localrepository</id>
<url>file://${project.basedir}/libs</url>
</repository>
.
.
.
.
</repositories>
Run Code Online (Sandbox Code Playgroud)希望这可以帮助
归档时间: |
|
查看次数: |
18075 次 |
最近记录: |