メイプルのプラグインの開発に精通しています。私は1つの質問で助けが必要です。クラスを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-Projectの拡張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>
しかし、私はMavenを実行します。テスト私はなぜjava.lang.ClassNotFoundException: message.RealMessage
を取得しますか?
クラスに明示的に使用されていない場合は、クラス名になるように再解析する文字列でなければなりません。それを行う唯一の方法は自分自身のプラグインを作成することです。 – Neil