3

中央リポジトリにアップロードしていないが、自分のプロジェクトで使用したい 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 

自分の名前

良い!

機能しないもの

今、プラグインを 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をインストールするにはどうすればよいですか? 依存関係が欠落しているように見えます。なんで?

4

1 に答える 1

4

MINSTALL-110にヒットしました。これは、Maven インストール プラグインの次の 3.0.0 リリースで修正される予定です。ここでの主な問題は、パラメーターを含む JAR ファイルを手動でインストールしていることです。プラグインは内部に POM があることを検出しますが、POM 全体ではなく、座標情報(グループ ID、アーティファクト ID、パッケージング、およびバージョン)fileのみを保持します。 . そのため、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 ログを確認すると、次のように表示されます。

[デバッグ] groupId、artifactId、パッケージング、およびバージョンに META-INF/maven/de.wintercloud/jinja-maven-plugin/pom.xml を使用する

バージョン 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

次に、一般的なスタブではなく、完全な POM がインストールされます。

この変更により、エラー

[エラー] 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: 必要なクラスがde.wintercloud:jinja-maven-plugin:1.0:renderjinja: org/yaml/snakeyaml/Yaml の実行中に見つからない

もう起こりません。Maven は依存関係を正しくダウンロードし、プラグインに使用します。

于 2016-10-10T14:49:39.680 に答える