我有一组项目包含(a)生成的bean,以及(b)使用这些bean的代码。我希望每个此类项目都能创建两个不同的工件:包含所有类的常规jar
工件,以及仅包含生成类型的自定义beans
工件。
我整理了一个快速插件,使用工件附件和" beans"来创建第二个beans
工件。分类器,但它在m2e中不能很好地工作。出于这个原因,我认为创建自定义包装类型(例如" test-jar")是正确的事情。
为了完全清楚我想象的是什么,这个pom今天会起作用并创建两种不同的包装类型的工件:
<project>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
您可以使用以下任一方法导入:
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<!-- <type>jar</type> -->
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<type>test-jar</type>
</dependency>
我想创建一个插件,让我使用(例如)beans
代替test-jar
来创建类似的&#34;配对&#34;工件。
我已经在maven源代码中探讨过了,你可以创建自定义类型。然而,&#34; test-jar&#34;好像是&#34;烘烤了&#34;对于maven,我无法判断它是否具有某些特殊功能,我无法使用自己的插件复制此行为。
当然,如果还有另一种方法可以处理这种行为而没有m2e理解的自定义类型 - 例如,但是让m2e理解我的分类器,尽管that seems hard - 我&#39所有的耳朵! :)
如何制作类似的配对包装类型?我已经看过this answer有关如何创建自定义类型的信息,但它似乎只是从具有给定自定义打包类型的pom创建一个工件。
答案 0 :(得分:2)
好的,想出了如何使用来自同一个POM的其他工件来获取自定义类型。
您执行使用附加工件来生成其他工件。对于我的例子,我在我的插件中使用了这个调用(在我完成构建我的JAR文件之后):
@Mojo(name="goal-name", defaultPhase=LifecyclePhase.PACKAGE)
public class MyMojo
extends AbstractMojo
{
@Component
private MavenProject project;
@Component
private MavenProjectHelper projectHelper;
@Component(role=Archiver.class, hint="jar")
private JarArchiver archiver;
public void execute() throws MojoExecutionException {
// Do work...
// Create JAR file...
File jarFile=createJarFile(archiver);
projectHelper.attachArtifact(project, "beans-jar", jarFile);
}
}
请注意,我指定了自定义类型beans-jar
,而没有指定分类器。
接下来,我将一个组件文件放到我的插件src/main/resources/plexus/components.xml
:
<component-set>
<components>
<component>
<role>org.apache.maven.artifact.handler.ArtifactHandler</role>
<role-hint>beans-jar</role-hint>
<implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
<configuration>
<classifier>beans</classifier>
<extension>jar</extension>
<type>beans-jar</type>
<packaging>jar</packaging>
<language>java</language>
<addedToClasspath>true</addedToClasspath>
</configuration>
</component>
</components>
</component-set>
在这里,我指定了自定义类型beans-jar
和classifier
,它似乎用于命名存储库中的新属性。
此文件基于主maven存储库中artifact-handlers.xml
项目的maven-core
。目前,该文件为located here。 (我通过在maven存储库中的所有.xml文件中查找test-jar
来找到此文件。)
要导入该依赖项,请使用:
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<type>beans-jar</type>
</dependency>
要导入依赖项,您不需要包含自定义插件。
答案 1 :(得分:2)
我建议尝试这样一种更简单的方法:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<id>second-jar</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>second</classifier>
<includes>
<include>**/service/*</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
通过<include>
,您可以定义将哪些类打包到补充jar文件中。