Skip to content

Commit a170c45

Browse files
committed
Let maven-axis-server-plugin automatically add axis-standalone-server to the classpath so that it is no longer required to declare it as a dependency.
1 parent 27fb034 commit a170c45

17 files changed

Lines changed: 142 additions & 76 deletions

File tree

axis-rt-transport-http-javanet/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,6 @@
5151
<artifactId>junit</artifactId>
5252
<scope>test</scope>
5353
</dependency>
54-
<dependency>
55-
<groupId>${project.groupId}</groupId>
56-
<artifactId>axis-standalone-server</artifactId>
57-
<version>${project.version}</version>
58-
<scope>test</scope>
59-
</dependency>
6054
<dependency>
6155
<groupId>${project.groupId}</groupId>
6256
<artifactId>interop-mock</artifactId>

integration/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@
4343
<artifactId>axis-codegen</artifactId>
4444
<version>${project.version}</version>
4545
</dependency>
46-
<dependency>
47-
<groupId>${project.groupId}</groupId>
48-
<artifactId>axis-standalone-server</artifactId>
49-
<version>${project.version}</version>
50-
<scope>test</scope>
51-
</dependency>
5246
<dependency>
5347
<groupId>${project.groupId}</groupId>
5448
<artifactId>axis-testutils</artifactId>

maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/AbstractStartProcessMojo.java

Lines changed: 127 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,37 @@
2121
import java.io.File;
2222
import java.util.ArrayList;
2323
import java.util.Arrays;
24+
import java.util.Collections;
25+
import java.util.HashSet;
26+
import java.util.Iterator;
2427
import java.util.List;
28+
import java.util.Set;
2529

26-
import org.apache.maven.artifact.DependencyResolutionRequiredException;
30+
import org.apache.maven.artifact.Artifact;
31+
import org.apache.maven.artifact.factory.ArtifactFactory;
32+
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
33+
import org.apache.maven.artifact.repository.ArtifactRepository;
34+
import org.apache.maven.artifact.resolver.ArtifactCollector;
35+
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
36+
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
37+
import org.apache.maven.artifact.resolver.ArtifactResolver;
38+
import org.apache.maven.artifact.resolver.DebugResolutionListener;
39+
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
2740
import org.apache.maven.execution.MavenSession;
2841
import org.apache.maven.plugin.MojoExecutionException;
2942
import org.apache.maven.plugin.MojoFailureException;
3043
import org.apache.maven.plugin.logging.Log;
3144
import org.apache.maven.project.MavenProject;
45+
import org.apache.maven.project.MavenProjectBuilder;
46+
import org.apache.maven.project.ProjectBuildingException;
47+
import org.apache.maven.project.artifact.InvalidDependencyVersionException;
3248
import org.apache.maven.toolchain.Toolchain;
3349
import org.apache.maven.toolchain.ToolchainManager;
50+
import org.codehaus.plexus.logging.LogEnabled;
51+
import org.codehaus.plexus.logging.Logger;
3452
import org.codehaus.plexus.util.StringUtils;
3553

36-
public abstract class AbstractStartProcessMojo extends AbstractServerMojo {
54+
public abstract class AbstractStartProcessMojo extends AbstractServerMojo implements LogEnabled {
3755
/**
3856
* The maven project.
3957
*
@@ -52,6 +70,49 @@ public abstract class AbstractStartProcessMojo extends AbstractServerMojo {
5270
*/
5371
private MavenSession session;
5472

73+
/**
74+
* @component
75+
*/
76+
private MavenProjectBuilder projectBuilder;
77+
78+
/**
79+
* Local maven repository.
80+
*
81+
* @parameter expression="${localRepository}"
82+
* @required
83+
* @readonly
84+
*/
85+
private ArtifactRepository localRepository;
86+
87+
/**
88+
* Remote repositories.
89+
*
90+
* @parameter expression="${project.remoteArtifactRepositories}"
91+
* @required
92+
* @readonly
93+
*/
94+
private List remoteArtifactRepositories;
95+
96+
/**
97+
* @component
98+
*/
99+
protected ArtifactFactory artifactFactory;
100+
101+
/**
102+
* @component
103+
*/
104+
private ArtifactResolver artifactResolver;
105+
106+
/**
107+
* @component
108+
*/
109+
private ArtifactCollector artifactCollector;
110+
111+
/**
112+
* @component
113+
*/
114+
private ArtifactMetadataSource artifactMetadataSource;
115+
55116
/**
56117
* @component
57118
*/
@@ -98,11 +159,71 @@ public abstract class AbstractStartProcessMojo extends AbstractServerMojo {
98159
*/
99160
private String argLine;
100161

162+
private Logger logger;
163+
164+
public void enableLogging(Logger logger) {
165+
this.logger = logger;
166+
}
167+
101168
protected boolean isDebug() {
102169
return debug;
103170
}
104171

105-
protected void startJavaProcess(String description, String mainClass, String[] args, File workDir, ProcessControl processControl) throws MojoExecutionException, MojoFailureException {
172+
private List/*<File>*/ buildClasspath(Set/*<Artifact>*/ additionalArtifacts) throws ProjectBuildingException, InvalidDependencyVersionException, ArtifactResolutionException, ArtifactNotFoundException {
173+
final Log log = getLog();
174+
175+
// We need dependencies in scope test. Since this is the largest scope, we don't need
176+
// to do any additional filtering based on dependency scope.
177+
Set projectDependencies = project.getArtifacts();
178+
179+
final Set artifacts = new HashSet(projectDependencies);
180+
181+
if (additionalArtifacts != null) {
182+
for (Iterator it = additionalArtifacts.iterator(); it.hasNext(); ) {
183+
Artifact a = (Artifact)it.next();
184+
if (log.isDebugEnabled()) {
185+
log.debug("Resolving artifact to be added to classpath: " + a);
186+
}
187+
ArtifactFilter filter = new ArtifactFilter() {
188+
public boolean include(Artifact artifact) {
189+
String id = artifact.getDependencyConflictId();
190+
for (Iterator it = artifacts.iterator(); it.hasNext(); ) {
191+
if (id.equals(((Artifact)it.next()).getDependencyConflictId())) {
192+
return false;
193+
}
194+
}
195+
return true;
196+
}
197+
};
198+
MavenProject p = projectBuilder.buildFromRepository(a, remoteArtifactRepositories, localRepository);
199+
if (filter.include(p.getArtifact())) {
200+
Set s = p.createArtifacts(artifactFactory, Artifact.SCOPE_RUNTIME, filter);
201+
artifacts.addAll(artifactCollector.collect(s,
202+
p.getArtifact(), p.getManagedVersionMap(),
203+
localRepository, remoteArtifactRepositories, artifactMetadataSource, filter,
204+
Collections.singletonList(new DebugResolutionListener(logger))).getArtifacts());
205+
artifacts.add(p.getArtifact());
206+
}
207+
}
208+
}
209+
210+
List/*<File>*/ cp = new ArrayList();
211+
cp.add(project.getBuild().getTestOutputDirectory());
212+
cp.add(project.getBuild().getOutputDirectory());
213+
for (Iterator it = artifacts.iterator(); it.hasNext(); ) {
214+
Artifact a = (Artifact)it.next();
215+
if (a.getArtifactHandler().isAddedToClasspath()) {
216+
if (a.getFile() == null) {
217+
artifactResolver.resolve(a, remoteArtifactRepositories, localRepository);
218+
}
219+
cp.add(a.getFile());
220+
}
221+
}
222+
223+
return cp;
224+
}
225+
226+
protected final void startJavaProcess(String description, String mainClass, Set additionalDependencies, String[] args, File workDir, ProcessControl processControl) throws MojoExecutionException, MojoFailureException {
106227
Log log = getLog();
107228

108229
// Locate java executable to use
@@ -120,9 +241,9 @@ protected void startJavaProcess(String description, String mainClass, String[] a
120241
// Get class path
121242
List classpath;
122243
try {
123-
classpath = project.getTestClasspathElements();
124-
} catch (DependencyResolutionRequiredException ex) {
125-
throw new MojoExecutionException("Unexpected exception", ex);
244+
classpath = buildClasspath(additionalDependencies);
245+
} catch (Exception ex) {
246+
throw new MojoExecutionException("Failed to build classpath", ex);
126247
}
127248
if (log.isDebugEnabled()) {
128249
log.debug("Class path elements: " + classpath);

maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartDaemonMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,6 @@ protected void doExecute() throws MojoExecutionException, MojoFailureException {
7272
if (args != null) {
7373
System.arraycopy(args, 0, vmArgs, 2, args.length);
7474
}
75-
startJavaProcess(daemonClass, "org.apache.axis.testutils.daemon.Launcher", vmArgs, workDir, new DaemonProcessControl(controlPort));
75+
startJavaProcess(daemonClass, "org.apache.axis.testutils.daemon.Launcher", null, vmArgs, workDir, new DaemonProcessControl(controlPort));
7676
}
7777
}

maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartProcessMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class StartProcessMojo extends AbstractStartProcessMojo {
5757

5858
protected void doExecute() throws MojoExecutionException, MojoFailureException {
5959
workDir.mkdirs();
60-
startJavaProcess(mainClass, mainClass, args != null ? args : new String[0], workDir, new ProcessControl() {
60+
startJavaProcess(mainClass, mainClass, null, args != null ? args : new String[0], workDir, new ProcessControl() {
6161
public void initializeProcess(Logger logger, Process process) throws Exception {
6262
}
6363

maven/maven-axis-server-plugin/src/main/java/org/apache/axis/tools/maven/server/StartServerMojo.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,17 @@
2222
import java.io.IOException;
2323
import java.net.URL;
2424
import java.util.ArrayList;
25+
import java.util.HashSet;
2526
import java.util.List;
27+
import java.util.Set;
2628

2729
import javax.xml.parsers.DocumentBuilder;
2830
import javax.xml.parsers.DocumentBuilderFactory;
2931
import javax.xml.parsers.ParserConfigurationException;
3032

3133
import org.apache.axis.client.AdminClient;
3234
import org.apache.axis.deployment.wsdd.WSDDConstants;
35+
import org.apache.maven.artifact.Artifact;
3336
import org.apache.maven.plugin.MojoExecutionException;
3437
import org.apache.maven.plugin.MojoFailureException;
3538
import org.apache.maven.plugin.logging.Log;
@@ -47,6 +50,13 @@
4750
* @requiresDependencyResolution test
4851
*/
4952
public class StartServerMojo extends AbstractStartProcessMojo {
53+
/**
54+
* @parameter default-value="${plugin.version}"
55+
* @required
56+
* @readonly
57+
*/
58+
private String axisVersion;
59+
5060
/**
5161
* @parameter default-value="${project.build.directory}/axis-server"
5262
* @required
@@ -214,9 +224,12 @@ protected void doExecute() throws MojoExecutionException, MojoFailureException {
214224
try {
215225
AdminClient adminClient = new AdminClient(true);
216226
adminClient.setTargetEndpointAddress(new URL("http://localhost:" + actualPort + "/axis/services/AdminService"));
227+
Set additionalDependencies = new HashSet();
228+
additionalDependencies.add(artifactFactory.createArtifact("org.apache.axis", "axis-standalone-server", axisVersion, Artifact.SCOPE_TEST, "jar"));
217229
startJavaProcess(
218230
"Server on port " + actualPort,
219231
"org.apache.axis.server.standalone.StandaloneAxisServer",
232+
additionalDependencies,
220233
(String[])args.toArray(new String[args.size()]),
221234
workDir,
222235
new AxisServerProcessControl(actualPort, adminClient,

samples/addr-sample/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,6 @@
3838
<artifactId>junit</artifactId>
3939
<scope>test</scope>
4040
</dependency>
41-
<dependency>
42-
<groupId>${project.groupId}</groupId>
43-
<artifactId>axis-standalone-server</artifactId>
44-
<version>${project.version}</version>
45-
<scope>test</scope>
46-
</dependency>
4741
</dependencies>
4842
<build>
4943
<plugins>

samples/attachments-sample/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@
3838
<artifactId>junit</artifactId>
3939
<scope>test</scope>
4040
</dependency>
41-
<dependency>
42-
<groupId>${project.groupId}</groupId>
43-
<artifactId>axis-standalone-server</artifactId>
44-
<version>${project.version}</version>
45-
</dependency>
4641
</dependencies>
4742
<build>
4843
<plugins>

samples/bidbuy-sample/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@
3838
<artifactId>junit</artifactId>
3939
<scope>test</scope>
4040
</dependency>
41-
<dependency>
42-
<groupId>${project.groupId}</groupId>
43-
<artifactId>axis-standalone-server</artifactId>
44-
<version>${project.version}</version>
45-
</dependency>
4641
</dependencies>
4742
<build>
4843
<plugins>

samples/encoding-sample/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@
3838
<artifactId>junit</artifactId>
3939
<scope>test</scope>
4040
</dependency>
41-
<dependency>
42-
<groupId>${project.groupId}</groupId>
43-
<artifactId>axis-standalone-server</artifactId>
44-
<version>${project.version}</version>
45-
</dependency>
4641
</dependencies>
4742
<build>
4843
<plugins>

0 commit comments

Comments
 (0)