Maven 3自定义格式
我尝试为Maven Assembly插件创建自定义格式。 我用下面的指令如何对Maven 3创造一些推广:Creating a Custom Build Extension for Maven 3.0Maven 3自定义格式
我的pom.xml的extention:
<?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:项目cl3上的程序集(default-cli):执行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插件,我不明白我该如何解决它。
在此先感谢。
我找到答案。我尝试扩展maven-assembly-plugin,但我没有创建扩展或插件,而是将我的jar添加到此插件中的依赖项。
我已经创建简单的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
删除anotation。 并在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>
您需要添加实现角色PlexusIoResourceCollection的第三个组件。
下面的描述对我的作品并得到行家来处理扩展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>
使用它作为构建扩展会导致抛出我没有调查过的问题。