{"record":{"id":"a4f175b483838df7","repo":"stanfordnlp/CoreNLP","slug":"error-no-training-file-provided-in-properties-or","errorCode":null,"errorMessage":"Error: No training file provided in properties or via command line --trainFile","messagePattern":"Error: No training file provided in properties or via command line --trainFile","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/edu/stanford/nlp/process/stattok/BuildMultiWordRules.java","lineNumber":26,"sourceCode":"import java.util.Map;\nimport java.util.Properties;\n\nimport edu.stanford.nlp.util.StringUtils;\nimport edu.stanford.nlp.util.logging.Redwood;\n\npublic class BuildMultiWordRules {\n  private static final Redwood.RedwoodChannels logger = Redwood.channels(StatTokSentTrainer.class);\n\n  // disallow making this class\n  private BuildMultiWordRules() {}\n\n  public static void main(String[] args) throws IOException {\n    Properties properties \t= StringUtils.argsToProperties(args);\n    String trainFile \t\t= properties.getProperty(\"trainFile\", null);\n    String multiWordRulesFile \t= properties.getProperty(\"multiWordRulesFile\", null);\n\n    if (trainFile == null){\n      logger.err(\"Error: No training file provided in properties or via command line --trainFile\");\n      return;\n    }\n\n    if (multiWordRulesFile == null){\n      logger.err(\"Error: No dest file provided in properties or via command line --multiWordRulesFile\");\n      return;\n    }\n\n    Map<String, String[]> rules = StatTokSentTrainer.inferMultiWordRules(trainFile);\n    StatTokSentTrainer.writeMultiWordRules(multiWordRulesFile, rules);\n  }\n}","sourceCodeStart":8,"sourceCodeEnd":38,"githubUrl":"https://github.com/stanfordnlp/CoreNLP/blob/1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a/src/edu/stanford/nlp/process/stattok/BuildMultiWordRules.java#L8-L38","documentation":"BuildMultiWordRules.main is a CLI tool that infers multi-word tokenization rules from a training file. Before doing any work it checks the 'trainFile' property parsed from the command line; if absent it logs this error and returns without throwing. It exists because the tool cannot run without training data.","triggerScenarios":"Running `java edu.stanford.nlp.process.stattok.BuildMultiWordRules` without a -trainFile <path> argument (or properties entry), so properties.getProperty(\"trainFile\") is null.","commonSituations":"Forgetting the argument name dash convention; passing the training file positionally instead of via -trainFile; misspelling the property (e.g. --trainingFile); reusing a script written for StatTokSentTrainer with different flags.","solutions":["Pass the training file explicitly: -trainFile path/to/train.conllu.","Check argument spelling matches exactly 'trainFile'.","Run without args or consult the class source to confirm required flags.","If using a properties file, ensure it contains a trainFile key reachable by StringUtils.argsToProperties."],"exampleFix":"// before\njava -cp ... edu.stanford.nlp.process.stattok.BuildMultiWordRules data/train.conllu\n// after\njava -cp ... edu.stanford.nlp.process.stattok.BuildMultiWordRules -trainFile data/train.conllu -multiWordRulesFile rules.txt","handlingStrategy":"validation","validationCode":"Properties p = StringUtils.argsToProperties(args);\nif (p.getProperty(\"trainFile\") == null) {\n    throw new IllegalArgumentException(\"Usage: BuildMultiWordRules -trainFile <train.conllu> -multiWordRulesFile <out>\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Wrap tool invocations in shell scripts that assert required flags.","Always pass files with explicit -flag value syntax, never positionally.","Add -help-style dry runs in CI to validate command templates."],"tags":["java","cli","missing-argument","stattok"],"backgroundTag":"missing-required-argument","analyzedSha":"1b7edd19c4d0d7b1f13a2591425b9b60a0b1af7a","analyzedAt":"2026-09-10T02:24:07.274Z","contentChangedAt":"2026-09-10T02:24:07.274Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}