Last active
September 19, 2018 02:03
-
-
Save chenhui0212/71a4863d8a8157bdfa6deeec6662e3c1 to your computer and use it in GitHub Desktop.
Maven手动加载需要的Jar包环境
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Mojo(name = "generate", defaultPhase = LifecyclePhase.INITIALIZE) | |
public class ProtoFileGenerator extends AbstractMojo { | |
@Component | |
private MavenProject project; | |
@Component | |
private PluginDescriptor descriptor; | |
@Component | |
private RepositorySystem repoSystem; | |
@Parameter(defaultValue = "${repositorySystemSession}", readonly = true, required = true) | |
private RepositorySystemSession repoSession; | |
public void execute() throws MojoExecutionException { | |
// 加载环境 | |
loadClassRealm(); | |
doSomething(); | |
} | |
/** | |
* 加载依赖的环境,并查询要生成Proto文件的Jar包路径 | |
*/ | |
private void loadClassRealm() throws MojoExecutionException { | |
try { | |
ClassRealm realm = descriptor.getClassRealm(); | |
// 将所有依赖的Jar包,添加到Maven环境中 | |
for (org.apache.maven.model.Dependency dependency : project.getDependencies()) { | |
List<ArtifactResult> artifactResults = getAllRelatedArtifacts(dependency); | |
for (ArtifactResult ar : artifactResults) { | |
realm.addURL(ar.getArtifact().getFile().toURI().toURL()); | |
} | |
} | |
} catch (MalformedURLException e) { | |
throw new MojoExecutionException("Could not load project dependencies.", e); | |
} | |
} | |
private List<ArtifactResult> getAllRelatedArtifacts(org.apache.maven.model.Dependency dependency) | |
throws MojoExecutionException { | |
Artifact artifact = new DefaultArtifact( | |
dependency.getGroupId(), | |
dependency.getArtifactId(), | |
dependency.getClassifier(), | |
dependency.getType(), | |
dependency.getVersion()); | |
ArtifactRequest artifactReq = new ArtifactRequest() | |
.setRepositories(project.getRemotePluginRepositories()) | |
.setArtifact(artifact); | |
CollectRequest collectRequest = new CollectRequest(new Dependency(artifact, JavaScopes.COMPILE), | |
project.getRemotePluginRepositories()); | |
// DependencyFilter filter = DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE); | |
DependencyRequest dependencyReq = new DependencyRequest(collectRequest, null); | |
List<ArtifactResult> artifactResults = new ArrayList<>(); | |
try { | |
ArtifactResult ar = repoSystem.resolveArtifact(repoSession, artifactReq); | |
artifactResults.add(ar); | |
List<ArtifactResult> dar = repoSystem.resolveDependencies(repoSession, dependencyReq).getArtifactResults(); | |
artifactResults.addAll(dar); | |
} catch (ArtifactResolutionException | DependencyResolutionException e) { | |
throw new MojoExecutionException("Artifact " + dependency.getArtifactId() + " could not be resolved.", e); | |
} | |
return artifactResults; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment