Java 将外部类与数据流一起使用

Java 将外部类与数据流一起使用,java,google-cloud-platform,google-cloud-dataflow,apache-beam,Java,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,我正在尝试创建一个自定义转换类,该类接受一个侧输入,我正在使用PipelineTester和PAssert来尝试和测试它,但是我一直在尝试从其他类引入转换的方法中得到一个无此类方法异常 原因:java.lang.NoSuchMethodError: createMap(Ljava/lang/Iterable;)Ljava/util/Map; 在com.org.beam.MyTransform.ProcessElement上(MyTransform.java:51) 我曾尝试使用@Autowire

我正在尝试创建一个自定义转换类,该类接受一个侧输入,我正在使用PipelineTester和PAssert来尝试和测试它,但是我一直在尝试从其他类引入转换的方法中得到一个无此类方法异常

原因:java.lang.NoSuchMethodError: createMap(Ljava/lang/Iterable;)Ljava/util/Map; 在com.org.beam.MyTransform.ProcessElement上(MyTransform.java:51)

我曾尝试使用@Autowired注释引入类,如

@Autowired
private MyUtils myutils;
以及在代码中创建一个静态实例,如

private static MyUtils myUtils = new MyUtils();
然后打电话

this.myUtils.createMap(mapThisToThat(inputCollection, this.myMap));
我还尝试过将这些方法设置为静态,并像这样调用它们

MyUtils.createMap(mapThisToThat(inputCollection, this.myMap));
将此映射到的签名是

private Iterable<MyObject> mapThisToThat(Iterable<MyObject> objectIterator, Map<String, Integer> myMap) {
private Iterable映射thistothat(Iterable objectIterator,Map myMap){
正在传递到具有此签名的createMap方法中的-

public Map<String, MyObject> createMap(Iterable<MyObject> inputCollection){
publicmap-createMap(Iterable-inputCollection){

因此,它正确地传递了一个MyObject的Iterable,但它说由于某种原因,该方法不存在。这是否意味着beam变换不能有外部方法,或者我做错了什么?

对于我来说,在python中,我需要做很多事情才能工作:

对于java用户来说,出于某种原因,他们没有交互文档,但在这里他们说的是:

在某些情况下,例如使用Apache AirFlow之类的调度器启动管道,您必须拥有一个自包含的应用程序。除了添加上一节中显示的现有依赖项外,还可以通过在pom.xml的项目部分显式添加以下依赖项来打包自执行JAR

在自述的例子中,他们这样说

或者,您可以选择将所有依赖项捆绑到一个JAR中,并在Maven环境之外执行它

如果您继续浏览该示例repo,则会有一个包含utils的
通用
文件夹。希望您可以复制他们的做法