diff --git a/source/contract/contract-maven-plugin/pom.xml b/source/contract/contract-maven-plugin/pom.xml
index 75349275..7ba6a4f4 100644
--- a/source/contract/contract-maven-plugin/pom.xml
+++ b/source/contract/contract-maven-plugin/pom.xml
@@ -87,6 +87,13 @@
3.6.0
provided
+
+
+ org.apache.maven.shared
+ maven-invoker
+ 3.0.1
+
+
@@ -110,31 +117,6 @@
false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
org.apache.maven.plugins
maven-surefire-plugin
@@ -142,29 +124,6 @@
true
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/ContractCheckMojo.java b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/ContractCheckMojo.java
new file mode 100644
index 00000000..a47e4eb6
--- /dev/null
+++ b/source/contract/contract-maven-plugin/src/main/java/com/jd/blockchain/ContractCheckMojo.java
@@ -0,0 +1,221 @@
+package com.jd.blockchain;
+
+import com.jd.blockchain.utils.ConsoleUtils;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.invoker.*;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+
+@Mojo(name = "contractCheck")
+public class ContractCheckMojo extends AbstractMojo {
+ Logger logger = LoggerFactory.getLogger(ContractCheckMojo.class);
+
+ @Parameter(defaultValue = "${project}", required = true, readonly = true)
+ private MavenProject project;
+
+ /**
+ * jar's name;
+ */
+ @Parameter
+ private String finalName;
+
+
+ /**
+ * mainClass;
+ */
+ @Parameter
+ private String mainClass;
+ /**
+ * ledgerVersion;
+ */
+ @Parameter
+ private String ledgerVersion;
+
+ /**
+ * mvnHome;
+ */
+ @Parameter
+ private String mvnHome;
+
+ /**
+ * first compile the class, then parse it;
+ */
+ @Override
+ public void execute() {
+ this.compileFiles();
+
+ }
+
+ private void compileFiles(){
+ // 获取当前项目pom.xml文件所在路径
+// URL targetClasses = this.getClass().getClassLoader().getResource("");
+// File file = new File(targetClasses.getPath());
+// String pomXmlPath = file.getParentFile().getParent() + File.separator + "pom.xml";
+
+ FileInputStream fis = null;
+ try {
+// fis = new FileInputStream(new File(pomXmlPath));
+ fis = new FileInputStream(project.getFile());
+ MavenXpp3Reader reader = new MavenXpp3Reader();
+ Model model = reader.read(fis);
+
+ //delete this plugin(contractCheck) from destination pom.xml;then add the proper plugins;
+ Plugin plugin = model.getBuild().getPluginsAsMap().get("com.jd.blockchain:contract-maven-plugin");
+ if(plugin == null){
+ plugin = model.getBuild().getPluginsAsMap().get("org.apache.maven.plugins:contract-maven-plugin");
+ }
+
+ if(plugin == null) {
+ return;
+ }
+
+ model.getBuild().removePlugin(plugin);
+// model.getBuild().setPlugins(null);
+
+// ConsoleUtils.info("----- 不携带Plugin -----");
+// print(model);
+
+ List plugins = new ArrayList<>();
+ plugins.add(createAssembly());
+ plugins.add(createCheckImports());
+
+ model.getBuild().setPlugins(plugins);
+
+ ConsoleUtils.info("----- add Plugin -----");
+ handle(model);
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (XmlPullParserException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void invokeCompile(File file) {
+ InvocationRequest request = new DefaultInvocationRequest();
+
+ Invoker invoker = new DefaultInvoker();
+ try {
+ request.setPomFile(file);
+
+ request.setGoals( Collections.singletonList( "verify" ) );
+// request.setMavenOpts("-DmainClass="+mainClass);
+ invoker.setMavenHome(new File(mvnHome));
+ invoker.execute(request);
+ } catch (MavenInvocationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private Plugin createCheckImports() {
+ Plugin plugin = new Plugin();
+ plugin.setGroupId("com.jd.blockchain");
+ plugin.setArtifactId("contract-maven-plugin");
+ plugin.setVersion(ledgerVersion);
+
+ Xpp3Dom finalNameNode = new Xpp3Dom("finalName");
+ finalNameNode.setValue(finalName);
+ Xpp3Dom configuration = new Xpp3Dom("configuration");
+ configuration.addChild(finalNameNode);
+ plugin.setConfiguration(configuration);
+
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId("make-assembly");
+ pluginExecution.setPhase("verify");
+ List goals = new ArrayList<>();
+ goals.add("checkImports");
+ pluginExecution.setGoals(goals);
+ List pluginExecutions = new ArrayList<>();
+ pluginExecutions.add(pluginExecution);
+ plugin.setExecutions(pluginExecutions);
+
+ return plugin;
+ }
+
+ private Plugin createAssembly() {
+ Plugin plugin = new Plugin();
+ plugin.setArtifactId("maven-assembly-plugin");
+
+ Xpp3Dom configuration = new Xpp3Dom("configuration");
+
+ Xpp3Dom mainClassNode = new Xpp3Dom("mainClass");
+ mainClassNode.setValue(mainClass);
+
+ Xpp3Dom manifest = new Xpp3Dom("manifest");
+ manifest.addChild(mainClassNode);
+
+ Xpp3Dom archive = new Xpp3Dom("archive");
+ archive.addChild(manifest);
+
+ Xpp3Dom finalNameNode = new Xpp3Dom("finalName");
+ finalNameNode.setValue(finalName);
+
+ Xpp3Dom appendAssemblyId = new Xpp3Dom("appendAssemblyId");
+ appendAssemblyId.setValue("false");
+
+ Xpp3Dom descriptorRef = new Xpp3Dom("descriptorRef");
+ descriptorRef.setValue("jar-with-dependencies");
+ Xpp3Dom descriptorRefs = new Xpp3Dom("descriptorRefs");
+ descriptorRefs.addChild(descriptorRef);
+
+ configuration.addChild(finalNameNode);
+ configuration.addChild(appendAssemblyId);
+ configuration.addChild(archive);
+ configuration.addChild(descriptorRefs);
+ plugin.setConfiguration(configuration);
+
+ PluginExecution pluginExecution = new PluginExecution();
+ pluginExecution.setId("make-assembly");
+ pluginExecution.setPhase("package");
+ List goals = new ArrayList<>();
+ goals.add("single");
+ pluginExecution.setGoals(goals);
+ List pluginExecutions = new ArrayList<>();
+ pluginExecutions.add(pluginExecution);
+ plugin.setExecutions(pluginExecutions);
+ return plugin;
+ }
+
+ private void handle(Model model) throws IOException {
+ MavenXpp3Writer mavenXpp3Writer = new MavenXpp3Writer();
+
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+
+ mavenXpp3Writer.write(outputStream, model);
+
+ byte[] buffer = outputStream.toByteArray();
+
+ //输出文件
+// File fileOutput = new File("fileOut.xml");
+// File fileOutput = File.createTempFile("fileOut",".xml");
+ File fileOutput = new File(project.getBasedir().getPath(),"fileOut.xml");
+ fileOutput.createNewFile();
+
+ ConsoleUtils.info("fileOutput's path="+fileOutput.getPath());
+ //创建文件输出流对象
+ FileOutputStream fos = new FileOutputStream(fileOutput);
+ //将字节数组fileInput中的内容输出到文件fileOut.xml中;
+ ConsoleUtils.info(new String(buffer));
+ fos.write(buffer);
+ invokeCompile(fileOutput);
+ fos.close();
+ }
+}
diff --git a/source/contract/contract-maven-plugin/src/test/resources/project-to-test/pom.xml b/source/contract/contract-maven-plugin/src/test/resources/project-to-test/pom.xml
index ea7962e8..80bf8e27 100644
--- a/source/contract/contract-maven-plugin/src/test/resources/project-to-test/pom.xml
+++ b/source/contract/contract-maven-plugin/src/test/resources/project-to-test/pom.xml
@@ -16,7 +16,7 @@
- contract1
+ contract
diff --git a/source/contract/contract-maven-plugin/src/test/resources/project-to-test/target/contract.jar b/source/contract/contract-maven-plugin/src/test/resources/project-to-test/target/contract.jar
index 7c172d0e..8e693437 100644
Binary files a/source/contract/contract-maven-plugin/src/test/resources/project-to-test/target/contract.jar and b/source/contract/contract-maven-plugin/src/test/resources/project-to-test/target/contract.jar differ