mirror of
https://github.com/wassname/ray.git
synced 2026-06-27 19:00:36 +08:00
enable maven checkstyle (#6829)
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package org.ray.api;
|
||||
|
||||
import org.ray.api.id.ActorId;
|
||||
import org.ray.api.id.UniqueId;
|
||||
|
||||
/**
|
||||
* A handle to an actor.
|
||||
|
||||
@@ -22,7 +22,7 @@ public class ActorCreationOptions extends BaseTaskOptions {
|
||||
public final String jvmOptions;
|
||||
|
||||
private ActorCreationOptions(Map<String, Double> resources, int maxReconstructions,
|
||||
boolean useDirectCall, String jvmOptions) {
|
||||
boolean useDirectCall, String jvmOptions) {
|
||||
super(resources);
|
||||
this.maxReconstructions = maxReconstructions;
|
||||
this.useDirectCall = useDirectCall;
|
||||
@@ -52,10 +52,10 @@ public class ActorCreationOptions extends BaseTaskOptions {
|
||||
// Since direct call is not fully supported yet (see issue #5559),
|
||||
// users are not allowed to set the option to true.
|
||||
// TODO (kfstorm): uncomment when direct call is ready.
|
||||
// public Builder setUseDirectCall(boolean useDirectCall) {
|
||||
// this.useDirectCall = useDirectCall;
|
||||
// return this;
|
||||
// }
|
||||
// public Builder setUseDirectCall(boolean useDirectCall) {
|
||||
// this.useDirectCall = useDirectCall;
|
||||
// return this;
|
||||
// }
|
||||
|
||||
public Builder setJvmOptions(String jvmOptions) {
|
||||
this.jvmOptions = jvmOptions;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
<suppress checks="SummaryJavadoc" files=".*" />
|
||||
<suppress checks="MemberNameCheck" files="PathConfig.java"/>
|
||||
<suppress checks="MemberNameCheck" files="RayParameters.java"/>
|
||||
<suppress checks="NoFinalizer" files="NativeRayActor.java"/>
|
||||
<suppress checks="AbbreviationAsWordInNameCheck" files="RayParameters.java"/>
|
||||
<suppress checks=".*" files="RayCall.java"/>
|
||||
<!-- suppress check for flatbuffer-generated files. -->
|
||||
|
||||
@@ -134,6 +134,12 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
package org.ray.runtime;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
import org.ray.api.RayActor;
|
||||
import org.ray.api.RayObject;
|
||||
import org.ray.api.RayPyActor;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package org.ray.runtime;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import org.ray.api.RayActor;
|
||||
import org.ray.api.RayObject;
|
||||
import org.ray.api.RayPyActor;
|
||||
@@ -157,7 +155,7 @@ public class RayMultiWorkerNativeRuntime implements RayRuntime {
|
||||
|
||||
@Override
|
||||
public <T> RayActor<T> createActor(RayFunc actorFactoryFunc, Object[] args,
|
||||
ActorCreationOptions options) {
|
||||
ActorCreationOptions options) {
|
||||
return getCurrentRuntime().createActor(actorFactoryFunc, args, options);
|
||||
}
|
||||
|
||||
@@ -168,7 +166,7 @@ public class RayMultiWorkerNativeRuntime implements RayRuntime {
|
||||
|
||||
@Override
|
||||
public RayObject callPy(String moduleName, String functionName, Object[] args,
|
||||
CallOptions options) {
|
||||
CallOptions options) {
|
||||
return getCurrentRuntime().callPy(moduleName, functionName, args, options);
|
||||
}
|
||||
|
||||
@@ -179,7 +177,7 @@ public class RayMultiWorkerNativeRuntime implements RayRuntime {
|
||||
|
||||
@Override
|
||||
public RayPyActor createPyActor(String moduleName, String className, Object[] args,
|
||||
ActorCreationOptions options) {
|
||||
ActorCreationOptions options) {
|
||||
return getCurrentRuntime().createPyActor(moduleName, className, args, options);
|
||||
}
|
||||
|
||||
@@ -190,7 +188,7 @@ public class RayMultiWorkerNativeRuntime implements RayRuntime {
|
||||
|
||||
@Override
|
||||
public void setAsyncContext(Object asyncContext) {
|
||||
currentThreadRuntime.set((RayNativeRuntime)asyncContext);
|
||||
currentThreadRuntime.set((RayNativeRuntime) asyncContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,7 +8,6 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
import org.ray.api.RayActor;
|
||||
import org.ray.api.id.ActorId;
|
||||
import org.ray.api.id.ObjectId;
|
||||
import org.ray.api.id.UniqueId;
|
||||
|
||||
/**
|
||||
* RayActor implementation for local mode.
|
||||
|
||||
@@ -46,7 +46,7 @@ public abstract class NativeRayActor implements RayActor, Externalizable {
|
||||
}
|
||||
|
||||
public static NativeRayActor create(long nativeCoreWorkerPointer, byte[] actorId,
|
||||
Language language) {
|
||||
Language language) {
|
||||
Preconditions.checkState(nativeCoreWorkerPointer != 0);
|
||||
switch (language) {
|
||||
case JAVA:
|
||||
@@ -90,15 +90,17 @@ public abstract class NativeRayActor implements RayActor, Externalizable {
|
||||
language = (Language) in.readObject();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
// TODO(zhijunfu): do we need to free the ActorHandle in core worker?
|
||||
}
|
||||
|
||||
private static native boolean nativeIsDirectCallActor(long nativeCoreWorkerPointer, byte[] actorId);
|
||||
private static native boolean nativeIsDirectCallActor(
|
||||
long nativeCoreWorkerPointer, byte[] actorId);
|
||||
|
||||
static native List<String> nativeGetActorCreationTaskFunctionDescriptor(
|
||||
long nativeCoreWorkerPointer, byte[] actorId);
|
||||
long nativeCoreWorkerPointer, byte[] actorId);
|
||||
|
||||
private static native byte[] nativeSerialize(long nativeCoreWorkerPointer, byte[] actorId);
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public class FunctionManager {
|
||||
* Construct a FunctionManager with the specified job resource path.
|
||||
*
|
||||
* @param jobResourcePath The specified job resource that can store the job's
|
||||
* resources.
|
||||
* resources.
|
||||
*/
|
||||
public FunctionManager(String jobResourcePath) {
|
||||
this.jobResourcePath = jobResourcePath;
|
||||
@@ -73,7 +73,7 @@ public class FunctionManager {
|
||||
* Get the RayFunction from a RayFunc instance (a lambda).
|
||||
*
|
||||
* @param jobId current job id.
|
||||
* @param func The lambda.
|
||||
* @param func The lambda.
|
||||
* @return A RayFunction object.
|
||||
*/
|
||||
public RayFunction getFunction(JobId jobId, RayFunc func) {
|
||||
@@ -94,12 +94,12 @@ public class FunctionManager {
|
||||
/**
|
||||
* Get the RayFunction from a function descriptor.
|
||||
*
|
||||
* @param jobId Current job id.
|
||||
* @param jobId Current job id.
|
||||
* @param functionDescriptor The function descriptor.
|
||||
* @return A RayFunction object.
|
||||
*/
|
||||
public RayFunction getFunction(JobId jobId,
|
||||
JavaFunctionDescriptor functionDescriptor) {
|
||||
JavaFunctionDescriptor functionDescriptor) {
|
||||
JobFunctionTable jobFunctionTable = jobFunctionTables.get(jobId);
|
||||
if (jobFunctionTable == null) {
|
||||
synchronized (this) {
|
||||
|
||||
@@ -14,8 +14,8 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.stream.Collectors;
|
||||
import org.ray.api.RayActor;
|
||||
import org.ray.api.id.ActorId;
|
||||
@@ -23,9 +23,9 @@ import org.ray.api.id.ObjectId;
|
||||
import org.ray.api.id.TaskId;
|
||||
import org.ray.api.options.ActorCreationOptions;
|
||||
import org.ray.api.options.CallOptions;
|
||||
import org.ray.runtime.RayDevRuntime;
|
||||
import org.ray.runtime.actor.LocalModeRayActor;
|
||||
import org.ray.runtime.context.LocalModeWorkerContext;
|
||||
import org.ray.runtime.RayDevRuntime;
|
||||
import org.ray.runtime.functionmanager.FunctionDescriptor;
|
||||
import org.ray.runtime.functionmanager.JavaFunctionDescriptor;
|
||||
import org.ray.runtime.generated.Common.ActorCreationTaskSpec;
|
||||
@@ -34,8 +34,8 @@ import org.ray.runtime.generated.Common.Language;
|
||||
import org.ray.runtime.generated.Common.TaskArg;
|
||||
import org.ray.runtime.generated.Common.TaskSpec;
|
||||
import org.ray.runtime.generated.Common.TaskType;
|
||||
import org.ray.runtime.object.NativeRayObject;
|
||||
import org.ray.runtime.object.LocalModeObjectStore;
|
||||
import org.ray.runtime.object.NativeRayObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -63,7 +63,7 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
private final ThreadLocal<TaskExecutor> currentTaskExecutor = new ThreadLocal<>();
|
||||
|
||||
public LocalModeTaskSubmitter(RayDevRuntime runtime, LocalModeObjectStore objectStore,
|
||||
int numberThreads) {
|
||||
int numberThreads) {
|
||||
this.runtime = runtime;
|
||||
this.objectStore = objectStore;
|
||||
// The thread pool that executes normal tasks in parallel.
|
||||
@@ -149,7 +149,8 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
}
|
||||
|
||||
private TaskSpec.Builder getTaskSpecBuilder(TaskType taskType,
|
||||
FunctionDescriptor functionDescriptor, List<FunctionArg> args) {
|
||||
FunctionDescriptor functionDescriptor,
|
||||
List<FunctionArg> args) {
|
||||
byte[] taskIdBytes = new byte[TaskId.LENGTH];
|
||||
new Random().nextBytes(taskIdBytes);
|
||||
return TaskSpec.newBuilder()
|
||||
@@ -163,14 +164,14 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
.addAllArgs(args.stream().map(arg -> arg.id != null ? TaskArg.newBuilder()
|
||||
.addObjectIds(ByteString.copyFrom(arg.id.getBytes())).build()
|
||||
: TaskArg.newBuilder().setData(ByteString.copyFrom(arg.value.data))
|
||||
.setMetadata(arg.value.metadata != null ? ByteString
|
||||
.copyFrom(arg.value.metadata) : ByteString.EMPTY).build())
|
||||
.setMetadata(arg.value.metadata != null ? ByteString
|
||||
.copyFrom(arg.value.metadata) : ByteString.EMPTY).build())
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ObjectId> submitTask(FunctionDescriptor functionDescriptor, List<FunctionArg> args,
|
||||
int numReturns, CallOptions options) {
|
||||
int numReturns, CallOptions options) {
|
||||
Preconditions.checkState(numReturns <= 1);
|
||||
TaskSpec taskSpec = getTaskSpecBuilder(TaskType.NORMAL_TASK, functionDescriptor, args)
|
||||
.setNumReturns(numReturns)
|
||||
@@ -181,7 +182,7 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
|
||||
@Override
|
||||
public RayActor createActor(FunctionDescriptor functionDescriptor, List<FunctionArg> args,
|
||||
ActorCreationOptions options) {
|
||||
ActorCreationOptions options) {
|
||||
ActorId actorId = ActorId.fromRandom();
|
||||
TaskSpec taskSpec = getTaskSpecBuilder(TaskType.ACTOR_CREATION_TASK, functionDescriptor, args)
|
||||
.setNumReturns(1)
|
||||
@@ -194,7 +195,8 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ObjectId> submitActorTask(RayActor actor, FunctionDescriptor functionDescriptor,
|
||||
public List<ObjectId> submitActorTask(
|
||||
RayActor actor, FunctionDescriptor functionDescriptor,
|
||||
List<FunctionArg> args, int numReturns, CallOptions options) {
|
||||
Preconditions.checkState(numReturns <= 1);
|
||||
TaskSpec.Builder builder = getTaskSpecBuilder(TaskType.ACTOR_TASK, functionDescriptor, args);
|
||||
@@ -211,7 +213,7 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
.build())
|
||||
.build();
|
||||
submitTaskSpec(taskSpec);
|
||||
if (numReturns == 0) {
|
||||
if (numReturns == 0) {
|
||||
return ImmutableList.of();
|
||||
} else {
|
||||
return ImmutableList.of(returnIds.get(0));
|
||||
@@ -266,7 +268,7 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
// If the task is an actor task or an actor creation task,
|
||||
// put the dummy object in object store, so those tasks which depends on it
|
||||
// can be executed.
|
||||
putObject = new NativeRayObject(new byte[]{1}, null);
|
||||
putObject = new NativeRayObject(new byte[] {1}, null);
|
||||
} else {
|
||||
putObject = returnObjects.get(i);
|
||||
}
|
||||
@@ -287,7 +289,8 @@ public class LocalModeTaskSubmitter implements TaskSubmitter {
|
||||
actorExecutorService.submit(runnable);
|
||||
} else if (taskSpec.getType() == TaskType.ACTOR_TASK) {
|
||||
synchronized (actorTaskExecutorServices) {
|
||||
ExecutorService actorExecutorService = actorTaskExecutorServices.get(getActorId(taskSpec));
|
||||
ExecutorService actorExecutorService =
|
||||
actorTaskExecutorServices.get(getActorId(taskSpec));
|
||||
actorExecutorService.submit(runnable);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -26,7 +26,7 @@ public class NativeTaskSubmitter implements TaskSubmitter {
|
||||
|
||||
@Override
|
||||
public List<ObjectId> submitTask(FunctionDescriptor functionDescriptor, List<FunctionArg> args,
|
||||
int numReturns, CallOptions options) {
|
||||
int numReturns, CallOptions options) {
|
||||
List<byte[]> returnIds = nativeSubmitTask(nativeCoreWorkerPointer, functionDescriptor, args,
|
||||
numReturns, options);
|
||||
return returnIds.stream().map(ObjectId::new).collect(Collectors.toList());
|
||||
@@ -34,14 +34,16 @@ public class NativeTaskSubmitter implements TaskSubmitter {
|
||||
|
||||
@Override
|
||||
public RayActor createActor(FunctionDescriptor functionDescriptor, List<FunctionArg> args,
|
||||
ActorCreationOptions options) {
|
||||
ActorCreationOptions options) {
|
||||
byte[] actorId = nativeCreateActor(nativeCoreWorkerPointer, functionDescriptor, args,
|
||||
options);
|
||||
return NativeRayActor.create(nativeCoreWorkerPointer, actorId, functionDescriptor.getLanguage());
|
||||
return NativeRayActor.create(nativeCoreWorkerPointer, actorId,
|
||||
functionDescriptor.getLanguage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ObjectId> submitActorTask(RayActor actor, FunctionDescriptor functionDescriptor,
|
||||
public List<ObjectId> submitActorTask(
|
||||
RayActor actor, FunctionDescriptor functionDescriptor,
|
||||
List<FunctionArg> args, int numReturns, CallOptions options) {
|
||||
Preconditions.checkState(actor instanceof NativeRayActor);
|
||||
List<byte[]> returnIds = nativeSubmitActorTask(nativeCoreWorkerPointer,
|
||||
@@ -50,15 +52,18 @@ public class NativeTaskSubmitter implements TaskSubmitter {
|
||||
return returnIds.stream().map(ObjectId::new).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static native List<byte[]> nativeSubmitTask(long nativeCoreWorkerPointer,
|
||||
private static native List<byte[]> nativeSubmitTask(
|
||||
long nativeCoreWorkerPointer,
|
||||
FunctionDescriptor functionDescriptor, List<FunctionArg> args, int numReturns,
|
||||
CallOptions callOptions);
|
||||
|
||||
private static native byte[] nativeCreateActor(long nativeCoreWorkerPointer,
|
||||
private static native byte[] nativeCreateActor(
|
||||
long nativeCoreWorkerPointer,
|
||||
FunctionDescriptor functionDescriptor, List<FunctionArg> args,
|
||||
ActorCreationOptions actorCreationOptions);
|
||||
|
||||
private static native List<byte[]> nativeSubmitActorTask(long nativeCoreWorkerPointer,
|
||||
private static native List<byte[]> nativeSubmitActorTask(
|
||||
long nativeCoreWorkerPointer,
|
||||
byte[] actorId, FunctionDescriptor functionDescriptor, List<FunctionArg> args,
|
||||
int numReturns, CallOptions callOptions);
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@ import org.testng.ITestResult;
|
||||
|
||||
public class TestProgressListener implements IInvokedMethodListener, ITestListener {
|
||||
|
||||
private String getFullTestName(ITestResult iTestResult) {
|
||||
return iTestResult.getTestClass().getName() + "."
|
||||
+ iTestResult.getMethod().getMethodName();
|
||||
private String getFullTestName(ITestResult testResult) {
|
||||
return testResult.getTestClass().getName() + "."
|
||||
+ testResult.getMethod().getMethodName();
|
||||
}
|
||||
|
||||
private void printInfo(String tag, String content) {
|
||||
|
||||
@@ -37,10 +37,6 @@ public class TestUtils {
|
||||
skipTestIfDirectActorCallEnabled(true);
|
||||
}
|
||||
|
||||
public static void skipTestIfDirectActorCallDisabled() {
|
||||
skipTestIfDirectActorCallEnabled(false);
|
||||
}
|
||||
|
||||
private static void skipTestIfDirectActorCallEnabled(boolean enabled) {
|
||||
if (enabled == ActorCreationOptions.DEFAULT_USE_DIRECT_CALL) {
|
||||
throw new SkipException(String.format("This test doesn't work when direct actor call is %s.",
|
||||
@@ -48,6 +44,10 @@ public class TestUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static void skipTestIfDirectActorCallDisabled() {
|
||||
skipTestIfDirectActorCallEnabled(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait until the given condition is met.
|
||||
*
|
||||
@@ -82,7 +82,7 @@ public class TestUtils {
|
||||
|
||||
/**
|
||||
* Warm up the cluster to make sure there's at least one idle worker.
|
||||
*
|
||||
* <p>
|
||||
* This is needed before calling `wait`. Because, in Travis CI, starting a new worker
|
||||
* process could be slower than the wait timeout.
|
||||
* TODO(hchen): We should consider supporting always reversing a certain number of
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package org.ray.api.test;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import java.io.File;
|
||||
import java.lang.ProcessBuilder.Redirect;
|
||||
import java.util.List;
|
||||
@@ -8,11 +11,6 @@ import java.util.Map.Entry;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
import org.ray.api.Ray;
|
||||
import org.ray.runtime.util.NetworkUtil;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
package org.ray.api.test;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
||||
import org.ray.api.Ray;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package org.ray.api.test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import org.ray.api.Ray;
|
||||
import org.ray.api.RayActor;
|
||||
import org.ray.api.RayObject;
|
||||
@@ -9,16 +13,11 @@ import org.ray.api.id.ActorId;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class SingleProcessModeTest extends BaseTest {
|
||||
|
||||
private final static int NUM_ACTOR_INSTANCE = 10;
|
||||
private static final int NUM_ACTOR_INSTANCE = 10;
|
||||
|
||||
private final static int TIMES_TO_CALL_PER_ACTOR = 10;
|
||||
private static final int TIMES_TO_CALL_PER_ACTOR = 10;
|
||||
|
||||
@RayRemote
|
||||
static class MyActor {
|
||||
|
||||
@@ -3,9 +3,6 @@ package org.ray.api.test;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
|
||||
import org.ray.api.id.ObjectId;
|
||||
import org.ray.api.id.TaskId;
|
||||
import org.ray.api.id.UniqueId;
|
||||
import org.ray.runtime.util.IdUtil;
|
||||
import org.testng.Assert;
|
||||
|
||||
@@ -149,6 +149,12 @@
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
||||
Reference in New Issue
Block a user