embulk-filter-copy 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/README.md +5 -1
- data/build.gradle +6 -5
- data/example/config.yml +1 -0
- data/example/data.tsv +5 -5
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +1 -2
- data/gradlew +13 -10
- data/src/main/java/org/embulk/filter/copy/CopyFilterPlugin.java +26 -37
- data/src/main/java/org/embulk/filter/copy/forward/{ForwardBaseTask.java → ForwardParentTask.java} +1 -1
- data/src/main/java/org/embulk/filter/copy/forward/InForwardEventReader.java +67 -62
- data/src/main/java/org/embulk/filter/copy/forward/InForwardService.java +102 -35
- data/src/main/java/org/embulk/filter/copy/forward/OutForwardEventBuilder.java +66 -54
- data/src/main/java/org/embulk/filter/copy/forward/OutForwardService.java +2 -2
- data/src/main/java/org/embulk/filter/copy/plugin/InternalForwardInputPlugin.java +11 -13
- data/src/main/java/org/embulk/filter/copy/runner/AsyncEmbulkRunnerService.java +32 -0
- data/src/main/java/org/embulk/filter/copy/runner/EmbulkRunner.java +124 -0
- data/src/main/java/org/embulk/filter/copy/spi/DataBuilder.java +41 -0
- data/src/main/java/org/embulk/filter/copy/spi/DataReader.java +41 -0
- data/src/main/java/org/embulk/filter/copy/spi/ElapsedTime.java +81 -0
- data/src/main/java/org/embulk/filter/copy/spi/PageBuilder.java +16 -0
- data/src/main/java/org/embulk/filter/copy/spi/PageReader.java +13 -0
- data/src/main/java/org/embulk/filter/copy/{util → spi}/StandardColumnVisitor.java +6 -6
- data/src/test/java/org/embulk/filter/copy/TestCopyFilterPlugin.java +0 -11
- metadata +24 -16
- data/src/main/java/org/embulk/filter/copy/executor/EmbulkExecutor.java +0 -105
- data/src/main/java/org/embulk/filter/copy/executor/LocalThreadExecutor.java +0 -96
- data/src/main/java/org/embulk/filter/copy/forward/InForwardVisitor.java +0 -63
- data/src/main/java/org/embulk/filter/copy/forward/OutForwardVisitor.java +0 -63
- data/src/main/java/org/embulk/filter/copy/util/ElapsedTime.java +0 -165
@@ -0,0 +1,32 @@
|
|
1
|
+
package org.embulk.filter.copy.runner;
|
2
|
+
|
3
|
+
import com.google.common.util.concurrent.AbstractExecutionThreadService;
|
4
|
+
import org.embulk.exec.ExecutionResult;
|
5
|
+
import org.embulk.spi.Exec;
|
6
|
+
import org.slf4j.Logger;
|
7
|
+
|
8
|
+
public class AsyncEmbulkRunnerService
|
9
|
+
extends AbstractExecutionThreadService
|
10
|
+
{
|
11
|
+
private static final Logger logger = Exec.getLogger(AsyncEmbulkRunnerService.class);
|
12
|
+
private final EmbulkRunner runner;
|
13
|
+
|
14
|
+
public AsyncEmbulkRunnerService(EmbulkRunner runner)
|
15
|
+
{
|
16
|
+
this.runner = runner;
|
17
|
+
}
|
18
|
+
|
19
|
+
@Override
|
20
|
+
protected void run()
|
21
|
+
throws Exception
|
22
|
+
{
|
23
|
+
ExecutionResult result = runner.run();
|
24
|
+
if (result.isSkipped()) {
|
25
|
+
logger.warn("ExecutionResult: EmbulkRunner.run is skipped");
|
26
|
+
}
|
27
|
+
if (!result.getIgnoredExceptions().isEmpty()) {
|
28
|
+
result.getIgnoredExceptions().forEach(e -> logger.warn("Ignored Error is found", e));
|
29
|
+
}
|
30
|
+
logger.debug("Execution Result: {}", result);
|
31
|
+
}
|
32
|
+
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
package org.embulk.filter.copy.runner;
|
2
|
+
|
3
|
+
import com.google.common.collect.Lists;
|
4
|
+
import com.google.inject.Injector;
|
5
|
+
import org.embulk.EmbulkEmbed;
|
6
|
+
import org.embulk.config.ConfigException;
|
7
|
+
import org.embulk.config.ConfigSource;
|
8
|
+
import org.embulk.exec.ExecutionResult;
|
9
|
+
import org.embulk.filter.copy.spi.ElapsedTime;
|
10
|
+
import org.embulk.spi.Exec;
|
11
|
+
import org.slf4j.Logger;
|
12
|
+
|
13
|
+
import java.lang.reflect.Constructor;
|
14
|
+
import java.lang.reflect.InvocationTargetException;
|
15
|
+
import java.util.List;
|
16
|
+
import java.util.Optional;
|
17
|
+
|
18
|
+
public class EmbulkRunner
|
19
|
+
{
|
20
|
+
private static final Logger logger = Exec.getLogger(EmbulkRunner.class);
|
21
|
+
|
22
|
+
public static Builder builder()
|
23
|
+
{
|
24
|
+
return new Builder();
|
25
|
+
}
|
26
|
+
|
27
|
+
public static class Builder
|
28
|
+
{
|
29
|
+
private ConfigSource execConfig;
|
30
|
+
private ConfigSource inputConfig;
|
31
|
+
private List<ConfigSource> filtersConfig;
|
32
|
+
private ConfigSource outputConfig;
|
33
|
+
|
34
|
+
public Builder()
|
35
|
+
{
|
36
|
+
}
|
37
|
+
|
38
|
+
public Builder execConfig(ConfigSource execConfig)
|
39
|
+
{
|
40
|
+
this.execConfig = execConfig;
|
41
|
+
return this;
|
42
|
+
}
|
43
|
+
|
44
|
+
public Builder inputConfig(ConfigSource inputConfig)
|
45
|
+
{
|
46
|
+
this.inputConfig = inputConfig;
|
47
|
+
return this;
|
48
|
+
}
|
49
|
+
|
50
|
+
public Builder filterConfig(List<ConfigSource> filtersConfig)
|
51
|
+
{
|
52
|
+
this.filtersConfig = filtersConfig;
|
53
|
+
return this;
|
54
|
+
}
|
55
|
+
|
56
|
+
public Builder outputConfig(ConfigSource outputConfig)
|
57
|
+
{
|
58
|
+
this.outputConfig = outputConfig;
|
59
|
+
return this;
|
60
|
+
}
|
61
|
+
|
62
|
+
public EmbulkRunner build()
|
63
|
+
{
|
64
|
+
return new EmbulkRunner(buildConfig());
|
65
|
+
}
|
66
|
+
|
67
|
+
protected ConfigSource buildConfig()
|
68
|
+
{
|
69
|
+
ConfigSource config = Exec.newConfigSource();
|
70
|
+
|
71
|
+
config.set("exec", Optional.ofNullable(execConfig).orElse(Exec.newConfigSource()));
|
72
|
+
config.set("in", Optional.ofNullable(inputConfig).orElseThrow(() -> new ConfigException("in: is null.")));
|
73
|
+
config.set("filters", Optional.ofNullable(filtersConfig).orElse(Lists.newArrayList()));
|
74
|
+
config.set("out", Optional.ofNullable(outputConfig).orElseThrow(() -> new ConfigException("out: is null.")));
|
75
|
+
|
76
|
+
return config;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
private final ConfigSource config;
|
81
|
+
|
82
|
+
EmbulkRunner(ConfigSource config)
|
83
|
+
{
|
84
|
+
this.config = config;
|
85
|
+
}
|
86
|
+
|
87
|
+
private EmbulkEmbed newEmbulkEmbed()
|
88
|
+
{
|
89
|
+
try {
|
90
|
+
Constructor<EmbulkEmbed> constructor = EmbulkEmbed.class
|
91
|
+
.getDeclaredConstructor(ConfigSource.class, Injector.class);
|
92
|
+
constructor.setAccessible(true);
|
93
|
+
return constructor.newInstance(null, Exec.getInjector());
|
94
|
+
}
|
95
|
+
catch (InstantiationException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) {
|
96
|
+
throw new ConfigException(e);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
public ExecutionResult run()
|
101
|
+
{
|
102
|
+
// TODO: expose config without secret configurations.
|
103
|
+
return ElapsedTime.measure(new ElapsedTime.Measurable<ExecutionResult>()
|
104
|
+
{
|
105
|
+
@Override
|
106
|
+
public void onStart()
|
107
|
+
{
|
108
|
+
logger.info("Start: Embulk Run");
|
109
|
+
}
|
110
|
+
|
111
|
+
@Override
|
112
|
+
public void onFinished(long elapsedMillis)
|
113
|
+
{
|
114
|
+
logger.info("Finished: Embulk Run (Elapsed: {} ms)", elapsedMillis);
|
115
|
+
}
|
116
|
+
|
117
|
+
@Override
|
118
|
+
public ExecutionResult run()
|
119
|
+
{
|
120
|
+
return newEmbulkEmbed().run(config);
|
121
|
+
}
|
122
|
+
});
|
123
|
+
}
|
124
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
package org.embulk.filter.copy.spi;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.Schema;
|
5
|
+
import org.embulk.spi.time.Timestamp;
|
6
|
+
import org.msgpack.value.Value;
|
7
|
+
|
8
|
+
public interface DataBuilder
|
9
|
+
{
|
10
|
+
Schema getSchema();
|
11
|
+
|
12
|
+
void addRecord();
|
13
|
+
|
14
|
+
void setNull(Column column);
|
15
|
+
|
16
|
+
void setNull(int columnIndex);
|
17
|
+
|
18
|
+
void setBoolean(Column column, boolean v);
|
19
|
+
|
20
|
+
void setBoolean(int columnIndex, boolean v);
|
21
|
+
|
22
|
+
void setString(Column column, String v);
|
23
|
+
|
24
|
+
void setString(int columnIndex, String v);
|
25
|
+
|
26
|
+
void setLong(Column column, long v);
|
27
|
+
|
28
|
+
void setLong(int columnIndex, long v);
|
29
|
+
|
30
|
+
void setDouble(Column column, double v);
|
31
|
+
|
32
|
+
void setDouble(int columnIndex, double v);
|
33
|
+
|
34
|
+
void setTimestamp(Column column, Timestamp v);
|
35
|
+
|
36
|
+
void setTimestamp(int columnIndex, Timestamp v);
|
37
|
+
|
38
|
+
void setJson(Column column, Value v);
|
39
|
+
|
40
|
+
void setJson(int columnIndex, Value v);
|
41
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
package org.embulk.filter.copy.spi;
|
2
|
+
|
3
|
+
import org.embulk.spi.Column;
|
4
|
+
import org.embulk.spi.Schema;
|
5
|
+
import org.embulk.spi.time.Timestamp;
|
6
|
+
import org.msgpack.value.Value;
|
7
|
+
|
8
|
+
public interface DataReader
|
9
|
+
{
|
10
|
+
Schema getSchema();
|
11
|
+
|
12
|
+
boolean nextRecord();
|
13
|
+
|
14
|
+
boolean isNull(Column column);
|
15
|
+
|
16
|
+
boolean isNull(int columnIndex);
|
17
|
+
|
18
|
+
boolean getBoolean(Column column);
|
19
|
+
|
20
|
+
boolean getBoolean(int columnIndex);
|
21
|
+
|
22
|
+
String getString(Column column);
|
23
|
+
|
24
|
+
String getString(int columnIndex);
|
25
|
+
|
26
|
+
long getLong(Column column);
|
27
|
+
|
28
|
+
long getLong(int columnIndex);
|
29
|
+
|
30
|
+
double getDouble(Column column);
|
31
|
+
|
32
|
+
double getDouble(int columnIndex);
|
33
|
+
|
34
|
+
Timestamp getTimestamp(Column column);
|
35
|
+
|
36
|
+
Timestamp getTimestamp(int columnIndex);
|
37
|
+
|
38
|
+
Value getJson(Column column);
|
39
|
+
|
40
|
+
Value getJson(int columnIndex);
|
41
|
+
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
package org.embulk.filter.copy.spi;
|
2
|
+
|
3
|
+
public class ElapsedTime
|
4
|
+
{
|
5
|
+
private final static long DEFAULT_POLLING_INTERVAL = 1_000; // ms
|
6
|
+
|
7
|
+
private static long getNow()
|
8
|
+
{
|
9
|
+
return System.currentTimeMillis();
|
10
|
+
}
|
11
|
+
|
12
|
+
private static long getElapsed(long start)
|
13
|
+
{
|
14
|
+
return System.currentTimeMillis() - start;
|
15
|
+
}
|
16
|
+
|
17
|
+
private static void waitUntilNextPolling(long pollingInterval)
|
18
|
+
{
|
19
|
+
try {
|
20
|
+
Thread.sleep(pollingInterval);
|
21
|
+
}
|
22
|
+
catch (InterruptedException e) {
|
23
|
+
// Do Nothing
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
public interface Measurable<T>
|
28
|
+
{
|
29
|
+
T run();
|
30
|
+
|
31
|
+
void onStart();
|
32
|
+
|
33
|
+
void onFinished(long elapsedMillis);
|
34
|
+
}
|
35
|
+
|
36
|
+
public interface Pollable<T>
|
37
|
+
{
|
38
|
+
boolean poll();
|
39
|
+
|
40
|
+
T getResult();
|
41
|
+
|
42
|
+
void onStart();
|
43
|
+
|
44
|
+
void onWaiting(long elapsedMillis);
|
45
|
+
|
46
|
+
void onFinished(long elapsedMillis);
|
47
|
+
}
|
48
|
+
|
49
|
+
public static <T> T measure(Measurable<T> measurable)
|
50
|
+
{
|
51
|
+
long start = getNow();
|
52
|
+
measurable.onStart();
|
53
|
+
try {
|
54
|
+
return measurable.run();
|
55
|
+
}
|
56
|
+
finally {
|
57
|
+
measurable.onFinished(getElapsed(start));
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
public static <T> T measureWithPolling(long pollingInterval, Pollable<T> pollable)
|
62
|
+
{
|
63
|
+
long start = getNow();
|
64
|
+
pollable.onStart();
|
65
|
+
while (!pollable.poll()) {
|
66
|
+
pollable.onWaiting(getElapsed(start));
|
67
|
+
waitUntilNextPolling(pollingInterval);
|
68
|
+
}
|
69
|
+
try {
|
70
|
+
return pollable.getResult();
|
71
|
+
}
|
72
|
+
finally {
|
73
|
+
pollable.onFinished(getElapsed(start));
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
public static <T> T measureWithPolling(Pollable<T> pollable)
|
78
|
+
{
|
79
|
+
return measureWithPolling(DEFAULT_POLLING_INTERVAL, pollable);
|
80
|
+
}
|
81
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
package org.embulk.filter.copy.spi;
|
2
|
+
|
3
|
+
import org.embulk.spi.BufferAllocator;
|
4
|
+
import org.embulk.spi.PageOutput;
|
5
|
+
import org.embulk.spi.Schema;
|
6
|
+
import org.embulk.filter.copy.spi.DataBuilder;
|
7
|
+
|
8
|
+
public class PageBuilder
|
9
|
+
extends org.embulk.spi.PageBuilder
|
10
|
+
implements DataBuilder
|
11
|
+
{
|
12
|
+
public PageBuilder(BufferAllocator allocator, Schema schema, PageOutput output)
|
13
|
+
{
|
14
|
+
super(allocator, schema, output);
|
15
|
+
}
|
16
|
+
}
|
@@ -1,17 +1,17 @@
|
|
1
|
-
package org.embulk.filter.copy.
|
1
|
+
package org.embulk.filter.copy.spi;
|
2
2
|
|
3
3
|
import org.embulk.spi.Column;
|
4
4
|
import org.embulk.spi.ColumnVisitor;
|
5
|
-
import org.embulk.spi.
|
6
|
-
import org.embulk.spi.
|
5
|
+
import org.embulk.filter.copy.spi.DataBuilder;
|
6
|
+
import org.embulk.filter.copy.spi.DataReader;
|
7
7
|
|
8
8
|
public class StandardColumnVisitor
|
9
9
|
implements ColumnVisitor
|
10
10
|
{
|
11
|
-
private final
|
12
|
-
private final
|
11
|
+
private final DataReader reader;
|
12
|
+
private final DataBuilder builder;
|
13
13
|
|
14
|
-
public StandardColumnVisitor(
|
14
|
+
public StandardColumnVisitor(DataReader reader, DataBuilder builder)
|
15
15
|
{
|
16
16
|
this.reader = reader;
|
17
17
|
this.builder = builder;
|
@@ -4,12 +4,10 @@ import com.google.common.collect.Lists;
|
|
4
4
|
import org.embulk.EmbulkTestRuntime;
|
5
5
|
import org.embulk.config.ConfigLoader;
|
6
6
|
import org.embulk.config.ConfigSource;
|
7
|
-
import org.embulk.filter.copy.executor.EmbulkExecutor.ExecutorTask;
|
8
7
|
import org.embulk.spi.Exec;
|
9
8
|
import org.embulk.spi.Schema;
|
10
9
|
import org.embulk.spi.type.Type;
|
11
10
|
import org.embulk.spi.type.Types;
|
12
|
-
import org.joda.time.DateTimeZone;
|
13
11
|
import org.junit.Before;
|
14
12
|
import org.junit.Rule;
|
15
13
|
import org.junit.Test;
|
@@ -18,7 +16,6 @@ import org.junit.rules.ExpectedException;
|
|
18
16
|
import static com.google.common.base.Optional.absent;
|
19
17
|
import static org.embulk.filter.copy.CopyFilterPlugin.EmbulkConfig;
|
20
18
|
import static org.embulk.filter.copy.CopyFilterPlugin.PluginTask;
|
21
|
-
import static org.embulk.filter.copy.executor.EmbulkExecutor.ExecutorTask.ExecutorType.LOCAL_THREAD;
|
22
19
|
import static org.embulk.filter.copy.forward.InForwardService.InForwardTask;
|
23
20
|
import static org.embulk.filter.copy.forward.OutForwardService.OutForwardTask;
|
24
21
|
import static org.junit.Assert.assertEquals;
|
@@ -73,14 +70,6 @@ public class TestCopyFilterPlugin
|
|
73
70
|
assertEquals(Exec.newConfigSource(), embulkConfig.getExecConfig());
|
74
71
|
assertEquals(Lists.<ConfigSource>newArrayList(), embulkConfig.getFilterConfig());
|
75
72
|
|
76
|
-
// EmbulkExecutor
|
77
|
-
ExecutorTask executorTask = task.getExecutorTask();
|
78
|
-
assertEquals(LOCAL_THREAD, executorTask.getType());
|
79
|
-
|
80
|
-
// TimestampFormatter
|
81
|
-
assertEquals(DateTimeZone.UTC, task.getDefaultTimeZone());
|
82
|
-
assertEquals("%Y-%m-%d %H:%M:%S.%6N %z", task.getDefaultTimestampFormat());
|
83
|
-
|
84
73
|
// ForwardBaseTask
|
85
74
|
assertEquals("message", task.getMessageTag());
|
86
75
|
assertEquals("shutdown", task.getShutdownTag());
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-filter-copy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Civitaspo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,30 +61,38 @@ files:
|
|
61
61
|
- lib/embulk/filter/copy.rb
|
62
62
|
- settings.gradle
|
63
63
|
- src/main/java/org/embulk/filter/copy/CopyFilterPlugin.java
|
64
|
-
- src/main/java/org/embulk/filter/copy/
|
65
|
-
- src/main/java/org/embulk/filter/copy/executor/LocalThreadExecutor.java
|
66
|
-
- src/main/java/org/embulk/filter/copy/forward/ForwardBaseTask.java
|
64
|
+
- src/main/java/org/embulk/filter/copy/forward/ForwardParentTask.java
|
67
65
|
- src/main/java/org/embulk/filter/copy/forward/InForwardEventReader.java
|
68
66
|
- src/main/java/org/embulk/filter/copy/forward/InForwardService.java
|
69
|
-
- src/main/java/org/embulk/filter/copy/forward/InForwardVisitor.java
|
70
67
|
- src/main/java/org/embulk/filter/copy/forward/OutForwardEventBuilder.java
|
71
68
|
- src/main/java/org/embulk/filter/copy/forward/OutForwardService.java
|
72
|
-
- src/main/java/org/embulk/filter/copy/forward/OutForwardVisitor.java
|
73
69
|
- src/main/java/org/embulk/filter/copy/plugin/InternalForwardInputPlugin.java
|
74
|
-
- src/main/java/org/embulk/filter/copy/
|
75
|
-
- src/main/java/org/embulk/filter/copy/
|
70
|
+
- src/main/java/org/embulk/filter/copy/runner/AsyncEmbulkRunnerService.java
|
71
|
+
- src/main/java/org/embulk/filter/copy/runner/EmbulkRunner.java
|
72
|
+
- src/main/java/org/embulk/filter/copy/spi/DataBuilder.java
|
73
|
+
- src/main/java/org/embulk/filter/copy/spi/DataReader.java
|
74
|
+
- src/main/java/org/embulk/filter/copy/spi/ElapsedTime.java
|
75
|
+
- src/main/java/org/embulk/filter/copy/spi/PageBuilder.java
|
76
|
+
- src/main/java/org/embulk/filter/copy/spi/PageReader.java
|
77
|
+
- src/main/java/org/embulk/filter/copy/spi/StandardColumnVisitor.java
|
76
78
|
- src/test/java/org/embulk/filter/copy/TestCopyFilterPlugin.java
|
77
79
|
- src/test/java/org/embulk/filter/copy/plugin/TestInternalForwardInputPlugin.java
|
78
|
-
- classpath/
|
80
|
+
- classpath/jsr305-1.3.9.jar
|
81
|
+
- classpath/error_prone_annotations-2.0.18.jar
|
82
|
+
- classpath/jackson-databind-2.7.1.jar
|
83
|
+
- classpath/jackson-core-2.7.1.jar
|
84
|
+
- classpath/embulk-filter-copy-0.1.0.jar
|
85
|
+
- classpath/slf4j-api-1.7.25.jar
|
86
|
+
- classpath/phi-accural-failure-detector-0.0.4.jar
|
87
|
+
- classpath/influent-transport-0.3.0.jar
|
79
88
|
- classpath/fluency-1.1.0.jar
|
80
|
-
- classpath/influent-java-0.
|
81
|
-
- classpath/
|
89
|
+
- classpath/influent-java-0.3.0.jar
|
90
|
+
- classpath/msgpack-core-0.8.13.jar
|
91
|
+
- classpath/guava-23.0.jar
|
82
92
|
- classpath/jackson-annotations-2.7.0.jar
|
83
|
-
- classpath/
|
84
|
-
- classpath/
|
93
|
+
- classpath/j2objc-annotations-1.1.jar
|
94
|
+
- classpath/animal-sniffer-annotations-1.14.jar
|
85
95
|
- classpath/jackson-dataformat-msgpack-0.8.11.jar
|
86
|
-
- classpath/phi-accural-failure-detector-0.0.4.jar
|
87
|
-
- classpath/slf4j-api-1.7.22.jar
|
88
96
|
homepage: https://github.com/civitaspo/embulk-filter-copy
|
89
97
|
licenses:
|
90
98
|
- MIT
|