Sou programador C++. Meu primeiro contato profissional com a linguagem é hoje.
Tenho algumas dúvidas a respeito das extensões dos arquivos.
.class -> OK .java -> arquivo compilado. Posso abrir um arquivo java para leitura em um editor? existe engenharia reversa? Ou posso entender-lo como um executavel para a JVM, assim como um .exe? .jar? -> arquivo compactado similar a o zip. posso transformar um .exe em um .jar? Assim como o .zip? .war? -> arquivo compactado tambem. posso transformar um .exe em um .war? Assim como um .zip?
Por favor respondam .java? Sim ou Não, .jar? Sim ou Não, .war? Sim ou Não. Se quiserem podem escrever a respeito mas sim ou não, para mim é importante.
.java -> source file
.class -> este sim, é o arquivo compilado. Há ferramentas para engenharia reversa (chamados de java decompiler)
.jar -> é uma library. Constituido por um conjunto de class e ficheiros de configuração.
.war -> é uma aplicação web, preparada para ser executada num servidor aplicacional. Constituido por um conjunto de jar e ficheiros de configuração
.ear -> é uma aplicação web “enterprise”, prepara para ser executada num servidor aplicacional. Constituido por um conjunto de war, jar e ficheiros de configuração
Existe a possibilidade de proteger os códigos .class, ou seja existe a possibilidade de vender um software em java? Sem que o código possa ser aberto por outra pessoa? Assim como um .exe?
Ou seja, se eu trabalhar e pagar outras pessoas para escrever o código, existe a possibilidade de vender o código .class e garantir que meu dinheiro tenha sido bem empregado, onde outras pessoas não teriam acesso ao código? Ou seja, desenvolver algo que não seja open source, que tenha investimento pago no desenvolvimento?
Um exe não é protegido. Tem como fazer engenharia reversa. Nenhuma tecnologia vai te oferecer essa garantia. Existem ferramentas (bem caras, inclusive) pra dificultar, mas é impossível se proteger 100%.
Os fontes da linguagem de alto nível ficam muito mais preservados ao gerar um .exe nativo desenvolvido em C++ do que bytecodes para rodar no Java, que qualquer criança faz engenharia reversa pra própria linguagem Java. Sem custo nenhum de ferramentas adicionais, o máximo que vão conseguir com .exe nativo feito em C++ é engenharia reversa para Assembly.