diff --git a/demo/java-demo/pom.xml b/demo/java-demo/pom.xml
index 636afe2..3f5192f 100644
--- a/demo/java-demo/pom.xml
+++ b/demo/java-demo/pom.xml
@@ -27,7 +27,7 @@
com.alibaba.testable
- core
+ testable-core
${testable.version}
provided
@@ -56,12 +56,17 @@
spring-boot-maven-plugin
- org.apache.maven.plugins
- maven-surefire-plugin
-
-
- @{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/agent/${testable.version}/agent-${testable.version}.jar
-
+ com.alibaba.testable
+ testable-maven-plugin
+ ${testable.version}
+
+
+ prepare
+
+ prepare
+
+
+
org.jacoco
diff --git a/demo/kotlin-demo/pom.xml b/demo/kotlin-demo/pom.xml
index aad9f5d..3ae9aa9 100644
--- a/demo/kotlin-demo/pom.xml
+++ b/demo/kotlin-demo/pom.xml
@@ -40,7 +40,7 @@
com.alibaba.testable
- core
+ testable-core
${testable.version}
provided
@@ -67,11 +67,17 @@
spring-boot-maven-plugin
- org.apache.maven.plugins
- maven-surefire-plugin
-
- @{argLine} -javaagent:${settings.localRepository}/com/alibaba/testable/agent/${testable.version}/agent-${testable.version}.jar
-
+ com.alibaba.testable
+ testable-maven-plugin
+ ${testable.version}
+
+
+ prepare
+
+ prepare
+
+
+
org.jetbrains.kotlin
diff --git a/pom.xml b/pom.xml
index 1c30c15..59cae37 100755
--- a/pom.xml
+++ b/pom.xml
@@ -9,8 +9,9 @@
pom
- agent
- core
+ testable-agent
+ testable-core
+ testable-maven-plugin
demo
diff --git a/agent/pom.xml b/testable-agent/pom.xml
similarity index 98%
rename from agent/pom.xml
rename to testable-agent/pom.xml
index 4d141d3..a90ac79 100755
--- a/agent/pom.xml
+++ b/testable-agent/pom.xml
@@ -4,7 +4,7 @@
4.0.0
com.alibaba.testable
- agent
+ testable-agent
0.1.1-SNAPSHOT
jar
testable-agent
diff --git a/agent/src/main/java/com/alibaba/testable/agent/PreMain.java b/testable-agent/src/main/java/com/alibaba/testable/agent/PreMain.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/PreMain.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/PreMain.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/constant/ConstPool.java b/testable-agent/src/main/java/com/alibaba/testable/agent/constant/ConstPool.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/constant/ConstPool.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/constant/ConstPool.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/handler/BaseClassHandler.java b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/BaseClassHandler.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/handler/BaseClassHandler.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/handler/BaseClassHandler.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/handler/SourceClassHandler.java b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/SourceClassHandler.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/handler/SourceClassHandler.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/handler/SourceClassHandler.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java b/testable-agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/handler/TestClassHandler.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/model/ImmutablePair.java b/testable-agent/src/main/java/com/alibaba/testable/agent/model/ImmutablePair.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/model/ImmutablePair.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/model/ImmutablePair.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/model/MethodInfo.java b/testable-agent/src/main/java/com/alibaba/testable/agent/model/MethodInfo.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/model/MethodInfo.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/model/MethodInfo.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java b/testable-agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/transformer/TestableClassTransformer.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/util/BytecodeUtil.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/util/ClassUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/ClassUtil.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/util/ClassUtil.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/util/ClassUtil.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/util/CollectionUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/CollectionUtil.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/util/CollectionUtil.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/util/CollectionUtil.java
diff --git a/agent/src/main/java/com/alibaba/testable/agent/util/StringUtil.java b/testable-agent/src/main/java/com/alibaba/testable/agent/util/StringUtil.java
similarity index 100%
rename from agent/src/main/java/com/alibaba/testable/agent/util/StringUtil.java
rename to testable-agent/src/main/java/com/alibaba/testable/agent/util/StringUtil.java
diff --git a/agent/src/test/java/com/alibaba/testable/agent/util/ClassUtilTest.java b/testable-agent/src/test/java/com/alibaba/testable/agent/util/ClassUtilTest.java
similarity index 100%
rename from agent/src/test/java/com/alibaba/testable/agent/util/ClassUtilTest.java
rename to testable-agent/src/test/java/com/alibaba/testable/agent/util/ClassUtilTest.java
diff --git a/agent/src/test/java/com/alibaba/testable/agent/util/CollectionUtilTest.java b/testable-agent/src/test/java/com/alibaba/testable/agent/util/CollectionUtilTest.java
similarity index 100%
rename from agent/src/test/java/com/alibaba/testable/agent/util/CollectionUtilTest.java
rename to testable-agent/src/test/java/com/alibaba/testable/agent/util/CollectionUtilTest.java
diff --git a/agent/src/test/java/com/alibaba/testable/agent/util/StringUtilTest.java b/testable-agent/src/test/java/com/alibaba/testable/agent/util/StringUtilTest.java
similarity index 100%
rename from agent/src/test/java/com/alibaba/testable/agent/util/StringUtilTest.java
rename to testable-agent/src/test/java/com/alibaba/testable/agent/util/StringUtilTest.java
diff --git a/core/pom.xml b/testable-core/pom.xml
similarity index 95%
rename from core/pom.xml
rename to testable-core/pom.xml
index e13392c..f4da04c 100644
--- a/core/pom.xml
+++ b/testable-core/pom.xml
@@ -6,7 +6,7 @@
Unit test enhancement toolkit
com.alibaba.testable
- core
+ testable-core
0.1.1-SNAPSHOT
testable-core
@@ -65,7 +65,7 @@
${basedir}/target/classes
- ${basedir}/../agent/target
+ ${basedir}/../testable-agent/target
testable-agent.jar
diff --git a/core/src/main/java/com/alibaba/testable/core/accessor/PrivateAccessor.java b/testable-core/src/main/java/com/alibaba/testable/core/accessor/PrivateAccessor.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/accessor/PrivateAccessor.java
rename to testable-core/src/main/java/com/alibaba/testable/core/accessor/PrivateAccessor.java
diff --git a/core/src/main/java/com/alibaba/testable/core/annotation/EnableTestable.java b/testable-core/src/main/java/com/alibaba/testable/core/annotation/EnableTestable.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/annotation/EnableTestable.java
rename to testable-core/src/main/java/com/alibaba/testable/core/annotation/EnableTestable.java
diff --git a/core/src/main/java/com/alibaba/testable/core/annotation/TestableInject.java b/testable-core/src/main/java/com/alibaba/testable/core/annotation/TestableInject.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/annotation/TestableInject.java
rename to testable-core/src/main/java/com/alibaba/testable/core/annotation/TestableInject.java
diff --git a/core/src/main/java/com/alibaba/testable/core/constant/ConstPool.java b/testable-core/src/main/java/com/alibaba/testable/core/constant/ConstPool.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/constant/ConstPool.java
rename to testable-core/src/main/java/com/alibaba/testable/core/constant/ConstPool.java
diff --git a/core/src/main/java/com/alibaba/testable/core/generator/BaseGenerator.java b/testable-core/src/main/java/com/alibaba/testable/core/generator/BaseGenerator.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/generator/BaseGenerator.java
rename to testable-core/src/main/java/com/alibaba/testable/core/generator/BaseGenerator.java
diff --git a/core/src/main/java/com/alibaba/testable/core/generator/PrivateAccessStatementGenerator.java b/testable-core/src/main/java/com/alibaba/testable/core/generator/PrivateAccessStatementGenerator.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/generator/PrivateAccessStatementGenerator.java
rename to testable-core/src/main/java/com/alibaba/testable/core/generator/PrivateAccessStatementGenerator.java
diff --git a/core/src/main/java/com/alibaba/testable/core/model/TestableContext.java b/testable-core/src/main/java/com/alibaba/testable/core/model/TestableContext.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/model/TestableContext.java
rename to testable-core/src/main/java/com/alibaba/testable/core/model/TestableContext.java
diff --git a/core/src/main/java/com/alibaba/testable/core/processor/EnableTestableProcessor.java b/testable-core/src/main/java/com/alibaba/testable/core/processor/EnableTestableProcessor.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/processor/EnableTestableProcessor.java
rename to testable-core/src/main/java/com/alibaba/testable/core/processor/EnableTestableProcessor.java
diff --git a/core/src/main/java/com/alibaba/testable/core/tool/TestableTool.java b/testable-core/src/main/java/com/alibaba/testable/core/tool/TestableTool.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/tool/TestableTool.java
rename to testable-core/src/main/java/com/alibaba/testable/core/tool/TestableTool.java
diff --git a/core/src/main/java/com/alibaba/testable/core/translator/BaseTranslator.java b/testable-core/src/main/java/com/alibaba/testable/core/translator/BaseTranslator.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/translator/BaseTranslator.java
rename to testable-core/src/main/java/com/alibaba/testable/core/translator/BaseTranslator.java
diff --git a/core/src/main/java/com/alibaba/testable/core/translator/EnableTestableTranslator.java b/testable-core/src/main/java/com/alibaba/testable/core/translator/EnableTestableTranslator.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/translator/EnableTestableTranslator.java
rename to testable-core/src/main/java/com/alibaba/testable/core/translator/EnableTestableTranslator.java
diff --git a/core/src/main/java/com/alibaba/testable/core/util/ResourceUtil.java b/testable-core/src/main/java/com/alibaba/testable/core/util/ResourceUtil.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/util/ResourceUtil.java
rename to testable-core/src/main/java/com/alibaba/testable/core/util/ResourceUtil.java
diff --git a/core/src/main/java/com/alibaba/testable/core/util/StringUtil.java b/testable-core/src/main/java/com/alibaba/testable/core/util/StringUtil.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/util/StringUtil.java
rename to testable-core/src/main/java/com/alibaba/testable/core/util/StringUtil.java
diff --git a/core/src/main/java/com/alibaba/testable/core/util/TestableLogger.java b/testable-core/src/main/java/com/alibaba/testable/core/util/TestableLogger.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/util/TestableLogger.java
rename to testable-core/src/main/java/com/alibaba/testable/core/util/TestableLogger.java
diff --git a/core/src/main/java/com/alibaba/testable/core/util/TestableUtil.java b/testable-core/src/main/java/com/alibaba/testable/core/util/TestableUtil.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/util/TestableUtil.java
rename to testable-core/src/main/java/com/alibaba/testable/core/util/TestableUtil.java
diff --git a/core/src/main/java/com/alibaba/testable/core/util/TypeUtil.java b/testable-core/src/main/java/com/alibaba/testable/core/util/TypeUtil.java
similarity index 100%
rename from core/src/main/java/com/alibaba/testable/core/util/TypeUtil.java
rename to testable-core/src/main/java/com/alibaba/testable/core/util/TypeUtil.java
diff --git a/core/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/testable-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor
similarity index 100%
rename from core/src/main/resources/META-INF/services/javax.annotation.processing.Processor
rename to testable-core/src/main/resources/META-INF/services/javax.annotation.processing.Processor
diff --git a/core/src/test/java/com/alibaba/testable/core/util/ResourceUtilTest.java b/testable-core/src/test/java/com/alibaba/testable/core/util/ResourceUtilTest.java
similarity index 100%
rename from core/src/test/java/com/alibaba/testable/core/util/ResourceUtilTest.java
rename to testable-core/src/test/java/com/alibaba/testable/core/util/ResourceUtilTest.java
diff --git a/core/src/test/java/com/alibaba/testable/core/util/StringUtilTest.java b/testable-core/src/test/java/com/alibaba/testable/core/util/StringUtilTest.java
similarity index 100%
rename from core/src/test/java/com/alibaba/testable/core/util/StringUtilTest.java
rename to testable-core/src/test/java/com/alibaba/testable/core/util/StringUtilTest.java
diff --git a/testable-maven-plugin/pom.xml b/testable-maven-plugin/pom.xml
new file mode 100644
index 0000000..5129979
--- /dev/null
+++ b/testable-maven-plugin/pom.xml
@@ -0,0 +1,44 @@
+
+ 4.0.0
+ com.alibaba.testable
+ testable-maven-plugin
+ maven-plugin
+ 0.1.1-SNAPSHOT
+ testable-maven-plugin
+ http://maven.apache.org
+
+
+
+ org.apache.maven
+ maven-plugin-api
+ 3.6.3
+
+
+ org.apache.maven
+ maven-core
+ 3.6.3
+
+
+ org.apache.maven.plugin-tools
+ maven-plugin-annotations
+ 3.6.0
+ provided
+
+
+ com.alibaba.testable
+ testable-agent
+ 0.1.1-SNAPSHOT
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-plugin-plugin
+ 3.6.0
+
+
+
+
diff --git a/testable-maven-plugin/src/main/java/com/alibaba/testable/TestableMojo.java b/testable-maven-plugin/src/main/java/com/alibaba/testable/TestableMojo.java
new file mode 100644
index 0000000..61d2fc7
--- /dev/null
+++ b/testable-maven-plugin/src/main/java/com/alibaba/testable/TestableMojo.java
@@ -0,0 +1,69 @@
+package com.alibaba.testable;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.project.MavenProject;
+
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Goal which prepare testable agent.
+ *
+ * @author flin
+ */
+@Mojo(name = "prepare", defaultPhase = LifecyclePhase.INITIALIZE,
+ requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe = true)
+public class TestableMojo extends AbstractMojo
+{
+ /**
+ * Maven project.
+ */
+ @Parameter(property = "project", readonly = true)
+ private MavenProject project;
+ /**
+ * Map of plugin artifacts.
+ */
+ @Parameter(property = "plugin.artifactMap", required = true, readonly = true)
+ private Map pluginArtifactMap;
+ /**
+ * Name of the Testable Agent artifact.
+ */
+ private static final String AGENT_ARTIFACT_NAME = "com.alibaba.testable:testable-agent";
+ /**
+ * Name of the property used in maven-osgi-test-plugin.
+ */
+ private static final String TYCHO_ARG_LINE = "tycho.testArgLine";
+ /**
+ * Name of the property used in maven-surefire-plugin.
+ */
+ private static final String SUREFIRE_ARG_LINE = "argLine";
+ /**
+ * Name of eclipse test plugin
+ */
+ private static final String ECLIPSE_TEST_PLUGIN = "eclipse-test-plugin";
+
+ public void execute() throws MojoExecutionException
+ {
+ final String testArgsPropertyKey = getEffectivePropertyKey();
+ final Properties projectProperties = project.getProperties();
+ final String oldArgs = projectProperties.getProperty(testArgsPropertyKey);
+ final String newArgs = (oldArgs == null) ? getAgentJarArgs().trim() : oldArgs + getAgentJarArgs();
+ getLog().info(testArgsPropertyKey + " set to " + newArgs);
+ projectProperties.setProperty(testArgsPropertyKey, newArgs);
+ }
+
+ private String getAgentJarArgs() {
+ final Artifact testableAgentArtifact = pluginArtifactMap.get(AGENT_ARTIFACT_NAME);
+ return " -javaagent:" + testableAgentArtifact.getFile().getAbsolutePath();
+ }
+
+ private String getEffectivePropertyKey() {
+ return ECLIPSE_TEST_PLUGIN.equals(project.getPackaging()) ? TYCHO_ARG_LINE : SUREFIRE_ARG_LINE;
+ }
+}