Как узнать местоположение локального репозитория из плагина Maven 3.0?
Как получить локальное местоположение хранилища (URI) из плагина Maven 3.x?
2 ответа
Решение
Используйте эфир, как описано в этом блоге.
/**
* The current repository/network configuration of Maven.
*
* @parameter default-value="${repositorySystemSession}"
* @readonly
*/
private RepositorySystemSession repoSession;
теперь получить местный репо через RepositorySystemSession.getLocalRepository()
:
LocalRepository localRepo = repoSession.getLocalRepository();
LocalRepository
имеет getBasedir()
метод, который, вероятно, то, что вы хотите.
Этот работал для меня в Maven v3.6.0:
@Parameter(defaultValue = "${localRepository}", readonly = true, required = true)
private ArtifactRepository localRepository;
@ Шон Патрик Флойд дал твердый ответ.
Это решение не требует внедрения свойств в поля вашего экземпляра.
@Override
public void execute() throws MojoExecutionException {
MavenProject project=(MavenProject)getPluginContext().get("project");
Set<Artifact> arts=project.getDependencyArtifacts();
Set<String> localRepoSet = new HashSet<>();
for (Artifact art : arts) {
if (art.getScope().equals(Artifact.SCOPE_COMPILE)) {
Path path = Paths.get(art.getFile().getAbsolutePath());
String removal = art.getGroupId().replace(".", "/") + "/" + art.getArtifactId() + "/"
+ art.getVersion();
String localRepo = path.getParent().toAbsolutePath().toString().replace(removal, "");
localRepoSet.add(localRepo);
}
}
}
Вы можете получить возможные местоположения всех ваших прямых зависимостей.
Протестировано в Maven 3.XX
Вы можете просто получить локальное хранилище в настройках:
@Parameter( defaultValue = "${settings}", readonly = true )
private Settings settings;
public void execute() throws MojoExecutionException {
final File localRepository = new File(settings.getLocalRepository());
...
}
Работает в Maven-3x.