| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.dubbo.erlang.analysis.utils; |
| |
| import org.apache.maven.shared.invoker.*; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import java.io.File; |
| import java.io.FileOutputStream; |
| import java.io.IOException; |
| import java.util.Collections; |
| |
| public class MavenJarUtil { |
| private String groupid; |
| private String artifactId; |
| private String version; |
| private String mainJarPath; |
| private String rootDir; |
| private static Logger log = LoggerFactory.getLogger(MavenJarUtil.class); |
| |
| public MavenJarUtil(String groupid, String artifactId, String version) { |
| this.groupid = groupid; |
| this.artifactId = artifactId; |
| this.version = version; |
| |
| |
| } |
| |
| public boolean copyDependence() { |
| String mvn_home = System.getenv("MAVEN_HOME"); |
| this.rootDir = genProjectDir(System.getProperty("project_save_dir", System.getProperty("user.dir") + File.separator + "mavenDown")); |
| if (rootDir == null) { |
| return false; |
| } |
| |
| log.info("down load lib jar dir:" + rootDir); |
| String pomPathJar = genPomFile(this.rootDir, "jar"); |
| |
| InvocationRequest request = new DefaultInvocationRequest(); |
| request.setPomFile(new File(pomPathJar)); |
| request.setGoals(Collections.singletonList("compile")); |
| |
| Invoker invoker = new DefaultInvoker(); |
| try { |
| if (mvn_home != null) { |
| log.info("use MAVEN_HOME:" + mvn_home); |
| invoker.setMavenHome(new File(mvn_home)); |
| } |
| |
| invoker.setWorkingDirectory(new File(rootDir)); |
| InvocationResult result = invoker.execute(request); |
| if (result.getExitCode() != 0) { |
| String pomPathWar = genPomFile(this.rootDir, "war"); |
| InvocationRequest requestWar = new DefaultInvocationRequest(); |
| requestWar.setPomFile(new File(pomPathWar)); |
| requestWar.setGoals(Collections.singletonList("compile")); |
| invoker.setWorkingDirectory(new File(rootDir)); |
| InvocationResult resultWar = invoker.execute(requestWar); |
| if (resultWar.getExitCode() != 0) { |
| log.error("mvn run result exception:" + resultWar.getExecutionException()); |
| return false; |
| } |
| } |
| |
| } catch (MavenInvocationException e) { |
| e.printStackTrace(); |
| } |
| return true; |
| } |
| |
| private String genPomFile(String rootDir, String pomDependenType) { |
| |
| String pomContent = String.format("<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + |
| " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n" + |
| " <modelVersion>4.0.0</modelVersion>\n" + |
| " <groupId>net.ifcoder.erlanalysis</groupId>\n" + |
| " <artifactId>denpendencedown</artifactId>\n" + |
| " <packaging>pom</packaging>\n" + |
| " <version>1.0-SNAPSHOT</version>\n" + |
| " <name>denpendencedown</name>\n" + |
| " <url>http://maven.apache.org</url>\n" + |
| " <dependencies>\n" + |
| "\t <dependency>\n" + |
| "\t\t <groupId>%s</groupId>\n" + |
| "\t\t <artifactId>%s</artifactId>\n" + |
| "\t\t <version>%s</version><type>%s</type>\n" + |
| " <exclusions>\n" + |
| " <exclusion>\n" + |
| " <groupId>log4j</groupId>\n" + |
| " <artifactId>log4j</artifactId>\n" + |
| " </exclusion>\n" + |
| " </exclusions>" + |
| "\t </dependency>\n" + |
| " </dependencies>\n" + |
| " <build>\n" + |
| " <plugins>\n" + |
| " <plugin>\n" + |
| " <groupId>org.apache.maven.plugins</groupId>\n" + |
| " <artifactId>maven-dependency-plugin</artifactId>\n" + |
| " <version>2.10</version>\n" + |
| "<executions>\n" + |
| " <execution>\n" + |
| " <id>copy-dependencies</id>\n" + |
| " <phase>compile</phase>\n" + |
| " <goals>\n" + |
| " <goal>copy-dependencies</goal>\n" + |
| " </goals>\n" + |
| " <!-- <configuration>\n" + |
| " <outputDirectory>${basedir}/lib</outputDirectory>\n" + |
| " <excludeScope>provided</excludeScope>\n" + |
| " </configuration> -->\n" + |
| " </execution>\n" + |
| " </executions>" + |
| " <configuration>\n" + |
| "\t\t\t\t\t <outputDirectory>${basedir}/lib</outputDirectory>\n" + |
| "\t\t\t\t\t <excludeScope>provided</excludeScope>\n" + |
| " <excludeArtifactIds>commons-logging</excludeArtifactIds>\n" + |
| " </configuration>" + |
| " </plugin>\n" + |
| " </plugins>\n" + |
| " </build>\n" + |
| "</project>\n", groupid, artifactId, version, pomDependenType); |
| //logback-core,logback-classic, |
| String pompath = rootDir + File.separator + "pom.xml"; |
| log.info("will create pom file:" + pompath); |
| File pomfile = new File(pompath); |
| try { |
| //pomfile.createNewFile(); |
| FileOutputStream out = new FileOutputStream(pomfile); |
| out.write(pomContent.getBytes()); |
| out.close(); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| return null; |
| } |
| return pompath; |
| } |
| |
| private String genProjectDir(String savedir) { |
| |
| |
| String tmpSavePath; |
| if (savedir.endsWith(File.separator)) { |
| tmpSavePath = String.format("%s%s%s%s", savedir, this.artifactId, File.separator, this.version); |
| } else { |
| tmpSavePath = String.format("%s%s%s%s%s", savedir, File.separator, this.artifactId, File.separator, this.version); |
| } |
| File rootDir = new File(tmpSavePath); |
| if (!rootDir.exists()) { |
| if (!rootDir.mkdirs()) { |
| return null; |
| } |
| } |
| return tmpSavePath; |
| } |
| |
| public String getMainJarPath() { |
| if (mainJarPath == null) { |
| mainJarPath = String.format("%s%slib%s%s-%s.jar", rootDir, File.separator, File.separator, artifactId, version); |
| } |
| return mainJarPath; |
| } |
| |
| public String getRootDir() { |
| return rootDir; |
| } |
| |
| public String getArtifactId() { |
| return artifactId; |
| } |
| |
| public String getVersion() { |
| return version; |
| } |
| } |