Я бы хотел узнать версию моего плагина во время его работы; 0.0.1-SNAPSHOT, 0.0.1, 1.0-SNAPSHOT и т. Д.
Можно ли это сделать? Класс AbstractMojo на самом деле не дает много информации о самом плагине.
РЕДАКТИРОВАТЬ - я использую следующий код в качестве обходного пути. Предполагается, что MANIFEST для плагина может быть загружен с URL-адреса ресурса, созданного с использованием URL-адреса ресурса самого плагина. Это нехорошо, но, похоже, работает для MANIFEST, расположенного в загрузчике файлов или jar-классов:
String getPluginVersion() throws IOException {
Manifest mf = loadManifest(getClass().getClassLoader(), getClass());
return mf.getMainAttributes().getValue("Implementation-Version");
}
Manifest loadManifest(final ClassLoader cl, final Class c) throws IOException {
String resourceName = "/" + c.getName().replaceAll("\\.", "/") + ".class";
URL classResource = cl.getResource(resourceName);
String path = classResource.toString();
int idx = path.indexOf(resourceName);
if (idx < 0) {
return null;
}
String urlStr = classResource.toString().substring(0, idx) + "/META-INF/MANIFEST.MF";
URL url = new URL(urlStr);
InputStream in = null;
Manifest mf = null;
try {
in = url.openStream();
mf = new Manifest(in);
} finally {
if (null != in) {
in.close();
}
in = null;
}
return mf;
}