gpt4 book ai didi

maven - 使用依赖项将本地 jar 中的自定义 Maven 插件安装到本地存储库

转载 作者:行者123 更新时间:2023-12-04 02:09:35 25 4
gpt4 key购买 nike

我有一个 maven 插件,我还没有上传到中央存储库,但我想在我的项目中使用它。

什么有效

我可以像这样安装maven插件:

git clone https://github.com/RudolfVonKrugstein/jinja-maven-plugin.git
cd jinja-maven-plugin
mvn install

然后我可以像这样使用 pom.xml 的插件:

<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>

<groupId>de.wintercloud</groupId>
<artifactId>sample</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<dependency>
<groupId>de.wintercloud</groupId>
<artifactId>jinja-maven-plugin</artifactId>
<version>1.0</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>de.wintercloud</groupId>
<artifactId>jinja-maven-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>renderjinja</goal>
</goals>
</execution>
</executions>
<configuration>
<outputFile>out.txt</outputFile>
<templateFile>templ.jinja</templateFile>
<varFile>vars.yaml</varFile>
</configuration>
</plugin>
</plugins>
</build>
</project>

以下是与编译相关的其他文件:

神庙神社:

{{ Name }}

变量.yaml:

Name: MyWonderfullName

这个有效:

> mvn compile
> cat out.txt

我的名字

很好!

什么不起作用

现在我正尝试将插件作为 jar 提供给我的同事,以便他们可以简单地安装 jar。我的想法是这样做:

git clone https://github.com/RudolfVonKrugstein/jinja-maven-plugin.git
cd jinja-maven-plugin
mvn package
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=target/jinja-maven-plugin-1.0.jar

当我现在做的时候(在示例项目目录中)

mvn compile

我收到这个错误:

[ERROR] Failed to execute goal de.wintercloud:jinja-maven-plugin:1.0:renderjinja (default) on project sample: Execution default of goal de.wintercloud:jinja-maven-plugin:1.0:renderjinja failed: A required class was missing while executing de.wintercloud:jinja-maven-plugin:1.0:renderjinja: org/yaml/snakeyaml/Yaml

如何安装 jar 以便我可以将它用作插件?在我看来,好像缺少依赖项。为什么?

最佳答案

您刚刚点击了 MINSTALL-110 ,这将在 Maven 安装插件的下一个 3.0.0 版本中修复。这里的核心问题是您正在手动安装一个带有 file 的 JAR 文件。参数,插件检测到里面有POM,但只保留the coordinate information (组 ID、 Artifact ID、包装和版本),而不是整个 POM。因此,安装 POM 时,不会保留依赖项。

确实,如果您看一下已安装的 POM,您会看到

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>de.wintercloud</groupId>
<artifactId>jinja-maven-plugin</artifactId>
<version>1.0</version>
<packaging>maven-plugin</packaging>
<description>POM was created from install:install-file</description>
</project>

这表明依赖关系没有保留。如果您在运行 install-file 命令时查看 Debug模式下的 Maven 日志,它将显示

[DEBUG] Using META-INF/maven/de.wintercloud/jinja-maven-plugin/pom.xml for groupId, artifactId, packaging and version

等待版本 3.0.0 的解决方法 is to specify the path to the POM file to install ,连同主要 Artifact ,通过指定 pomFile范围。改为运行以下命令:

mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -Dfile=target/jinja-maven-plugin-1.0.jar -DpomFile=pom.xml

然后将安装完整的 POM,而不是通用 stub 。

有了这个改动,报错

[ERROR] Failed to execute goal de.wintercloud:jinja-maven-plugin:1.0:renderjinja (default) on project sample: Execution default of goal de.wintercloud:jinja-maven-plugin:1.0:renderjinja failed: A required class was missing while executing de.wintercloud:jinja-maven-plugin:1.0:renderjinja: org/yaml/snakeyaml/Yaml

不会再发生了。 Maven 将正确下载依赖项并将它们用于插件。

关于maven - 使用依赖项将本地 jar 中的自定义 Maven 插件安装到本地存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com