использование args4j в весенней CLI-программе с аргументами с двойными дефисами - PullRequest
0 голосов
/ 24 февраля 2020
import lombok.Data;
import org.kohsuke.args4j.Option;

@Data
public class ArgsEntity {
    @Option(name = "-file", aliases = {"-f"}, usage = "file")
    private String file= "";

    @Option(name = "-job", aliases = {"-j"}, usage = "job")
    private String job = "";
}

@ComponentScan
public class JobQueryApplication {

    private static final Logger logger = LoggerFactory.getLogger(JobQueryApplication.class);

    public static void main(String args[]) {
        SpringApplication.run(JobQueryApplication.class, args);
    }

    @Autowired
    private ApplicationContext context;

    @Bean
    public CommandLineRunner run(RestTemplate restTemplate) throws Exception {
        return args -> {

            ArgsEntity argsEntity = new ArgsEntity();
            CmdLineUtils.parseCmdLine(argsEntity, args);
            if (argsEntity.isHelp()) {
                return;
            }
            // ......
        };
    }
}

При начальной загрузке программа CommandLineRunner может хорошо работать с args4j. например,

java -jar myjar.jar -f file.txt -j job.txt

Но теперь я хочу указать некоторые аргументы опции для весны, такие как --spring.config.location=file:./config/application-mine.yml

Как объединить эти типы параметров с обычными параметрами?

java -Dspring.config.location=file:./config/application-mine.yml -jar myjar.jar -f file.txt -j job.txt Задание его в системном свойстве -Doption работает. Но мне интересно, как использовать аргумент командной строки, начинающийся с --.

java -Dspring.config.location=file:./config/application-mine.yml -jar myjar.jar --spring.config.location=file:./config/application-mine.yml -f file.txt -j job.txt, дает ошибку разбора "--spring.config.location=file:./config/application-atom.yml" is not a valid option.

...