Consigo un Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z
mientras yo estoy tratando de crear una instancia de DefaultParser
.
Mi código:
Options options = new Options();
// option for day offset
options.addOption(new Option("d", "day", true, "Day offset. -d 7 will
request for last weeks data"));
//options.addOption("d", "day", true, "Day offset. -d 7 will request for last weeks data");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse(options, args);
StackTrace:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.hasShortOption(Ljava/lang/String;)Z
at org.apache.commons.cli.DefaultParser.handleShortAndLongOption(DefaultParser.java:491)
at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:243)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
at domain.Main.main(Main.java:60)
La línea 60 es la siguiente:
CommandLine cmd = parser.parse(options, args);
Estaba siguiente documentación oficial de Apache - https://commons.apache.org/proper/commons-cli/usage.html .
Si la biblioteca se puede encontrar dentro de la jarra.
Intentado correr un par de combinaciones, que ninguno de ellos realmente trabajó. En el lado positivo me ha dado un error diferente. Mas o menos.
StackTrace # 2
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.commons.cli.Options.getMatchingOptions(Ljava/lang/String;)Ljava/util/List;
at org.apache.commons.cli.DefaultParser.handleLongOptionWithoutEqual(DefaultParser.java:404)
at org.apache.commons.cli.DefaultParser.handleLongOption(DefaultParser.java:384)
at org.apache.commons.cli.DefaultParser.handleToken(DefaultParser.java:239)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:120)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
at domain.Main.main(Main.java:61)
Eso es avro-tools-1.8.2.jar
trae su propia versión de commons-cli
que entre en conflicto con la versión que desea utilizar.
De acuerdo con el META-INF\DEPENDENCIES
archivo de avro-tools-1.8.2.jar
lo que parece ser la versión 1.2.
Básicamente, usted tiene tres opciones:
- Utilizar la misma versión de la
commons-cli
que se ha utilizado poravro-tools-1.8.2.jar
. Es decircommons-cli-1.2
- Asegúrese de que su versión de
commons-cli
está en la ruta de clase antesavro-tools-1.8.2.jar
- Volver a pensar en la necesidad de utilizar
avro-tools
y eliminar la dependencia si no es realmente necesario.
Si realmente necesita avro-tools
la primera opción podría ser el camino a seguir. La opción segundos, probablemente se solucionará el problema en el primer lugar, pero podría romper la funcionalidad de avro-tools
debido a la versión 1.4 de conflicto commons-cli
se usará eso. Si realmente no necesita avro-tools
(no estamos hablando de avro
, pero el tools
frasco específicamente) Me gustaría recomendar para eliminar la avro-tools
dependencia. avro-tools
no parece ser adecuado para ser tirado como dependencia pero es más una aplicación independiente. No haces un montón de bibliotecas externas para que todos puedan llegar a causar conflictos de versión de su lado.