我熟悉Maven插件的開發,我需要一個問題的幫助。將類傳遞給Maven2插件
據我所知,將一個複雜的對象傳遞給一個maven插件是非常容易的,但通過一個類怎麼樣? 可以說我即將編寫自己的插件,其中只包含2個類。
Message.java
package abstractmessage;
public abstract class Message {
public abstract String getMessage();
}
MessageMojo.java
/**
* @goal message
*/
public class MessageMojo extends AbstractMojo {
/**
* @parameter expression="${message.messageClass}"
*/
private String messageClass ;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
Message message = null;
try {
Class<?> clazz = Class.forName(messageClass);
message = (Message) clazz.newInstance();
} catch (Exception e) {
getLog().error(e);
}
getLog().info(message.getMessage());
}
}
所以插件期望的擴展消息類的名稱,並試圖dynamicaly初始化。
真正的Maven項目中擴展的Message類看起來像這樣。
package message;
import abstractmessage.Message;
public class RealMessage extends Message {
@Override
public String getMessage() {
return "Hello plugin. From MavenProject.";
}
}
而pom.xml使用插件。
<build>
<plugins>
<plugin>
<artifactId>message-plugin</artifactId>
<groupId>message-plugin</groupId>
<version>1.0</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>message</goal>
</goals>
</execution>
</executions>
<configuration>
<messageClass>message.RealMessage</messageClass>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<artifactId>message-plugin</artifactId>
<groupId>message-plugin</groupId>
<version>1.0</version>
</dependency>
</dependencies>
但是,當我執行行家:測試我得到一個java.lang.ClassNotFoundException: message.RealMessage
爲什麼會這樣?
如果沒有明確使用該類,那麼它必須是一個字符串,您將重新解釋爲一個類名,唯一的方法就是根據我的知識製作自己的插件。 – Neil 2012-03-15 16:59:04