I tend to not change the current behavior. For other framework(e.g. hadoop, yarn), the arguments after user jar are also parsed by user `main()`, not the framework client.
Best, Yang tison <wander4...@gmail.com> 于2020年3月6日周五 下午10:55写道: > Hi Jingsong, > > I think your propose is "--classpath can occur behind the jar file". > > Generally speaking I agree on that it is a painful required format that > users tend to just ignore that order how an option occurs. So it is +1 from > my side to loose the constraint. > > However, for the migration and implementation part, things go into a bit > tricky. > > For user interface, let's say we only enable --classpath to occur behind > the jar file, at least the semantic changes if there is a user pass > --classpath intended to be a main argument. > > Besides, said we fix on the library commons-cli to implement the CLI, it > would be a bit tricky we implement such special taken logic. > > Accidentally I encounter similar CLI problem recently so here are some of > my thoughts about the problem, > > 1. I agree that for options, users tend to treat <jar-file> the same as > [OPTIONS] and mix up the order. It would be an improvement we loss the > constraint. > 2. Then, we still have to introduce something that users specify their > args for the main method. > 3. In order to achieve 2, there is a mature solution in shell scripting > that use double-dash(--) to to signify the end of command options. > 4. Now, if we keep <jar-file> as position argument, to support mix-ordered > position argument & named argument, we might switch to other library such > as argparse4j since commons-cli doesn't support position argument. An > alternative is we change <jar-file> as named argument but then we double > break user interface. > > Though, it will break user interface so we firstly **MUST** start a > discussion and see whether the community think of it and if so, how to > integrate it. For me, read the doc is an easy solution to save us from > breaking user interface. I don't stick to loose the constraint. > > Best, > tison. > > > Jingsong Li <jingsongl...@gmail.com> 于2020年3月6日周五 下午10:27写道: > >> Hi tison and Aljoscha, >> >> Do you think "--classpath can not be in front of jar file" is an >> improvement? Or need documentation? Because I used to be confused. >> >> Best, >> Jingsong Lee >> >> On Fri, Mar 6, 2020 at 10:22 PM tison <wander4...@gmail.com> wrote: >> >>> I think the problem is that --classpath should be before the user jar, >>> i.e., /opt/flink/job/kafkaDemo19-1.0-SNAPSHOT.jar >>> >>> Best, >>> tison. >>> >>> >>> Aljoscha Krettek <aljos...@apache.org> 于2020年3月6日周五 下午10:03写道: >>> >>>> Hi, >>>> >>>> first a preliminary question: does the jar file contain >>>> com.alibaba.fastjson.JSON? Could you maybe list the contents of the jar >>>> here? >>>> >>>> Best, >>>> Aljoscha >>>> >>>> On 06.03.20 13:25, ouywl wrote: >>>> > Hi all >>>> > When I start a flinkcluster in session mode, It include jm/tm. >>>> And then I >>>> > submit a job like ‘bin/flink run —jobmanager “ip:8081” —class path >>>> a.jar’. Even >>>> > the a.jar in all jm/tm and ‘bin/flink’ mechine . It will throw >>>> exception “ >>>> > /opt/flink/bin/flink run --jobmanager ip:8081 --class >>>> > com.netease.java.TopSpeedWindowing --parallelism 1 --detached >>>> > /opt/flink/job/kafkaDemo19-1.0-SNAPSHOT.jar --classpath >>>> > file:///opt/flink/job/fastjson-1.2.66.jar >>>> > Starting execution of program >>>> > Executing TopSpeedWindowing example with default input data set. >>>> > Use --input to specify file input. >>>> > java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSON >>>> > at com.netease.java.TopSpeedWindowing.main(TopSpeedWindowing.java:98) >>>> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> > at >>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) >>>> > at >>>> > >>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >>>> > at java.lang.reflect.Method.invoke(Method.java:498) >>>> > at >>>> > >>>> org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:576) >>>> > at >>>> > >>>> org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:438) >>>> > at >>>> org.apache.flink.client.program.ClusterClient.run(ClusterClient.java:274) >>>> > at >>>> org.apache.flink.client.cli.CliFrontend.executeProgram(CliFrontend.java:746)” >>>> > As I read the code , flink cli have not load the —classspath jar, >>>> So It seems >>>> > a bug about the flink cli. Are you agree with me? >>>> > Best, >>>> > Ouywl >>>> > >>>> >>> >> >> -- >> Best, Jingsong Lee >> >