有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

将自定义maven插件从本地jar安装到具有依赖项的本地存储库中

我有一个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 }}

瓦尔斯。亚马尔:

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以便将其用作插件? 在我看来,似乎缺少依赖项。为什么?


共 (1) 个答案

  1. # 1 楼答案

    您只需点击MINSTALL-110,这将在Maven安装插件的下一个3.0.0版本中修复。这里的核心问题是,您正在手动安装一个带有^{}参数的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] 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以及主要工件的问题。改为运行以下命令:

    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,而不是通用存根

    有了这个改变,错误就消失了

    [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将正确下载依赖项并将其用于插件