我有一个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>
以下是与编译相关的其他文件:
templ.jinja:
{{ Name }}
vars.yaml:
Name: MyWonderfullName
这有效:
> mvn compile
> cat out.txt
MYNAME
尼斯!
什么行不通
现在我试图将插件作为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以便将其用作插件? 它看起来好像缺少依赖关系。为什么呢?
答案 0 :(得分:3)
您只需点击MINSTALL-110,这将在Maven安装插件的下一个3.0.0版本中修复。这里的核心问题是您手动安装带有file
参数的JAR文件,插件检测到内部有POM,但只保留the coordinate information(组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>
表明没有保留依赖关系。如果在运行install-file
命令时在调试模式下查看Maven日志,它将显示
[DEBUG]对groupId,artifactId,包装和版本使用META-INF / maven / de.wintercloud / jinja-maven-plugin / pom.xml
通过指定is to specify the path to the POM file to install参数来解决等待版本3.0.0 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,而不是通用存根。
通过此更改,错误
[错误]无法执行目标de.wintercloud:jinja-maven-plugin:1.0:项目示例中的renderjinja(默认):目标de.wintercloud的执行默认值:jinja-maven-plugin:1.0:renderjinja failed:A执行de.wintercloud时缺少必需的类:jinja-maven-plugin:1.0:renderjinja:org / yaml / snakeyaml / Yaml
不会再发生了。 Maven将正确下载依赖项并将其用于插件。