Nat*_*han 3 maven maven-install-plugin
我有一个 Maven 插件,我尚未将其上传到中央存储库,但我想在我的项目中使用它。
什么有效
我可以像这样安装 Maven 插件:
git clone https://github.com/RudolfVonKrugstein/jinja-maven-plugin.git
cd jinja-maven-plugin
mvn install
Run Code Online (Sandbox Code Playgroud)
然后我可以使用像这样的 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>
Run Code Online (Sandbox Code Playgroud)
以下是与编译相关的其他文件:
寺庙神社:
{{ Name }}
Run Code Online (Sandbox Code Playgroud)
vars.yaml:
Name: MyWonderfullName
Run Code Online (Sandbox Code Playgroud)
这有效:
> mvn compile
> cat out.txt
Run Code Online (Sandbox Code Playgroud)
我的名字
好的!
什么不起作用
现在我正在尝试将该插件作为 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
Run Code Online (Sandbox Code Playgroud)
当我现在这样做时(在示例项目目录中)
mvn compile
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[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
Run Code Online (Sandbox Code Playgroud)
如何安装该 jar 以便将其用作插件?在我看来,好像缺少依赖项。为什么?
您只需点击MINSTALL-110,该问题将在 Maven 安装插件的下一个 3.0.0 版本中修复。这里的核心问题是,你手动安装带有file参数的JAR文件,插件检测到里面有POM,但只保留坐标信息(组id,工件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>
Run Code Online (Sandbox Code Playgroud)
这表明依赖关系没有保留。如果你在运行命令时以调试模式查看 Maven 日志install-file,它将显示
[DEBUG] 使用 META-INF/maven/de.wintercloud/jinja-maven-plugin/pom.xml 作为 groupId、artifactId、packages 和 version
等待版本 3.0.0 的解决方法是通过指定参数来指定要安装的 POM 文件以及主要工件的路径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
Run Code Online (Sandbox Code Playgroud)
然后将安装完整的 POM,而不是通用存根。
通过此更改,错误
[错误] 无法在项目示例上执行目标 de.wintercloud:jinja-maven-plugin:1.0:renderjinja (默认): 目标 de.wintercloud:jinja-maven-plugin:1.0:renderjinja 的执行默认失败: 所需的类是执行 de.wintercloud:jinja-maven-plugin:1.0:renderjinja: org/yaml/snakeyaml/Yaml 时丢失
不会再发生了。Maven 将正确下载依赖项并将其用于插件。
| 归档时间: |
|
| 查看次数: |
3301 次 |
| 最近记录: |