Персонализиран формат на Maven 3

Опитвам се да създам персонализиран формат за приставката за сглобяване на maven. Използвам следната инструкция за създаване на разширения за maven 3: Създаване на персонализирано разширение за компилация за Maven 3.0

Моят pom.xml за разширение:

<?xml version="1.0"?>
<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>my.maven.extention</groupId>
    <artifactId>pkg</artifactId>
    <version>0.0.1</version>
    <name>maven pkg archiver</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-archiver</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-compat</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-core</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.plexus</groupId>
                <artifactId>plexus-component-metadata</artifactId>
                <version>1.5.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate-metadata</goal>
                            <goal>generate-test-metadata</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

И празен клас:

import java.io.IOException;

import org.codehaus.plexus.archiver.AbstractArchiver;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.component.annotations.Component;

@Component(role = Archiver.class, hint = "pkg")
public class PkgArchiver extends AbstractArchiver {

    @Override
    protected void close() throws IOException {
        // TODO Auto-generated method stub

    }

    @Override
    protected void execute() throws ArchiverException, IOException {
        // TODO Auto-generated method stub

    }

    @Override
    protected String getArchiveType() {
        return "pkg";
    }

}

И използвайте в моя проект maven:

<extensions>
    <extension>
        <groupId>my.maven.extention</groupId>
        <artifactId>pkg</artifactId>
        <version>0.0.1</version>
        </extension>
</extensions>

Но mvn се провали:

[ГРЕШКА] Неуспешно изпълнение на целта org.apache.maven.plugins:maven-assembly-plugin:2.2:assembly (default-cli) на проект cl3: Възникна несъвместимост на типа при изпълнение на org.apache.maven.plugins:maven-assembly -plugin:2.2:assembly: my.maven.extention.pkg.PkgArchiver не може да бъде прехвърлен към org.codehaus.plexus.archiver.Archiver

не разбирам Тъй като AbstractArchiver имплементира org.codehaus.plexus.archiver.Archiver и моят клас разширява този абстрактен клас. Моето предложение: maven използва различни зареждащи класове за различни добавки. Това е първият ми плъгин за maven и не разбирам как мога да го поправя.

Благодаря предварително.


person Pavel Drobushevich    schedule 22.12.2010    source източник


Отговори (2)


Намерих отговор. Опитвам се да разширя maven-assembly-plugin и не трябва да създавам разширение или плъгин, а добавям своя буркан към зависимости в този плъгин.

Създадох прост maven проект, pom.xml:

<?xml version="1.0"?>
<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>my.maven.extention</groupId>
    <artifactId>pkg</artifactId>
    <version>0.0.1</version>
    <name>maven pkg archiver</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-archiver</artifactId>
            <version>1.1</version>
        </dependency>
    </dependencies>
</project>

И добавете описание на компонента src/main/resources/META-INF/plexus/components.xml

<component-set>
    <components>
        <component>
            <role>org.codehaus.plexus.archiver.Archiver</role>
            <role-hint>pkg</role-hint>
            <implementation>cmy.maven.extention.pkg.PkgArchiver</implementation>
            <instantiation-strategy>per-lookup</instantiation-strategy> 
        </component>
    </components>
</component-set>

И премахнете анотацията от PkgArchiver class. И използвайте този проект в зависимости на maven-assembly-plugin.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <descriptors>
            <descriptor>${basedir}/src/main/assembly/assembly.xml</descriptor>
        </descriptors>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>my.maven.extention</groupId>
            <artifactId>pkg</artifactId>
            <version>0.0.1</version>
        </dependency>
    </dependencies>
</plugin>
person Pavel Drobushevich    schedule 22.12.2010

Трябва да добавите трети компонент, изпълняващ ролята PlexusIoResourceCollection.

Следният дескриптор работи за мен и кара maven да обработва разширението xpi като разширение за архив (zip)

<?xml version="1.0" encoding="UTF-8"?>
<component-set>
    <components>

        <component>
            <role>org.codehaus.plexus.archiver.Archiver</role>
            <role-hint>xpi</role-hint>
               <implementation>org.codehaus.plexus.archiver.zip.ZipArchiver</implementation>
            <instantiation-strategy>per-lookup</instantiation-strategy>
        </component>

        <component>
            <role>org.codehaus.plexus.archiver.UnArchiver</role>
            <role-hint>xpi</role-hint>
            <implementation>org.codehaus.plexus.archiver.zip.ZipUnArchiver</implementation>
            <instantiation-strategy>per-lookup</instantiation-strategy>
        </component>

        <component>
            <role>org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection</role>
            <role-hint>xpi</role-hint>
            <implementation>org.codehaus.plexus.archiver.zip.PlexusIoZipFileResourceCollection</implementation>
            <instantiation-strategy>per-lookup</instantiation-strategy>
        </component>

    </components>
</component-set>

В клиентския проект трябва да го използвате като зависимост от плъгин

            <artifactId>maven-assembly-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>your.group.id</groupId>
                    <artifactId>xpi-archiver</artifactId>
                    <version>1.0.0-SNAPSHOT</version>
                </dependency>
            </dependencies>

Използването му като разширение за изграждане води до проблеми с кастинга, които не съм проучвал.

person user1593165    schedule 08.02.2016