Não tenho uma solução, mas alguns testes e recomendações para investigar seu problema.
Eu tentei reproduzir o problema que você descreve. Eu até criei os nomes falsos (diretório somedir, classe Mainclass).
Aqui está minha versão do Mainclass. Essencialmente, ele obtém a propriedade do sistema e a utiliza para gerar alguma saída de diagnóstico simples.
package com.software;
import java.io.File;
public class Mainclass {
public static void main(String[] args) {
String someDir = System.getProperty("some.prop.dir");
if (someDir == null || someDir.isEmpty()) {
System.out.println("No directory parameter specified");
} else {
File dir = new File(someDir);
System.out.println(String.format("Directory stats: %s, %s, %s", someDir, dir.getAbsolutePath(), dir.isDirectory() ? "directory" : "file"));
}
System.out.println("Main running okay.");
}
}
Em seguida, criei um arquivo jar contendo Mainclass e o nomeie some.jar.
Eu corri a linha de comando da seguinte forma:
java -cp "some.jar" -Dsome.prop.dir=C:\somedir com.software.Mainclass
Resultados:
Estatísticas do diretório: C: \ somedir, C: \ somedir, diretório
Principal funcionando bem.
Eu também corri sem o parâmetro -D:
java -cp "some.jar" com.software.Mainclass
Resultados:
Nenhum parâmetro de diretório especificado
Principal funcionando bem.
Embora eu conseguisse resolver o problema sem problemas, vi alguns lugares onde o problema poderia existir:
- Os arquivos jar. Você está especificando o caminho de classe para ser os primeiros 2 nomes de arquivos. Mainclass precisa estar em um deles ou não será encontrado. Eu suspeito que este não é o problema, uma vez que é executado corretamente sem o parâmetro -D.
- O parâmetro -D é usado internamente para localizar a classe. No código de exemplo acima, estou apenas relatando no diretório. Talvez você esteja usando para localizar o arquivo de classe de alguma forma, e ele não pode encontrá-lo? Talvez o programa use o diretório para procurar a classe, mas quando você omite o diretório, o padrão é usar aquele especificado no arquivo jar?
Se eu corri no diretório bin (onde as classes foram geradas), eu pude omitir o comando -cp e ele funcionou corretamente.
Se eu usasse -cp com um jar sem Mainclass, recebi o erro, mas entendi se -D foi especificado.