Incapaz de usar Intellij com uma pasta de fontes gerada

87

Pergunta relacionada Como configurar IntelliJ IDEA e / ou Maven para adicionar diretórios automaticamente com código-fonte Java gerado usando jaxb2-maven-plugin?

Eu tenho um plugin personalizado que gera fontes sob target/generated-sources(Observe nenhum nome de ferramenta aqui). Então eu obtenho fontes como target/generated-sources/com/mycompany... etc.

Este formato não pode ser alterado, então poderei configurar o Intellij para adicioná-lo como uma pasta de origem. A partir de agora, posso ver que o Intellij foi adicionado target/generated-sources/comcomo a pasta de origem.

Observe que não tenho a opção de configurar o plugin!

ATUALIZAÇÃO 1 : Não concordo com o fato de que DEVO colocar minhas fontes geradas em uma pasta com o nome da ferramenta. Pode ser uma boa convenção, mas se eu tiver apenas um gerador não preciso colocá-lo lá? Novamente, no meu pom.xml, tenho uma resourcesseção que indica claramente que target/generated-sourcesdeve ser tratada como uma pasta de origem. Isso funciona perfeitamente bem no Eclipse, então não tenho ideia de por que o Intellij não respeitaria minhas configurações.

TL; DR -> Quando coloco target/generated-sourcesna seção de recursos pom.xmlpor que o Intellij é tão zeloso em adicionar target/generated-sources/comao classpath?

Kannan Ekanath
fonte
1
Dê uma olhada em stackoverflow.com/questions/10735380/…
Vadzim
Tente esta solução, ela pode resolver seu problema. clique aqui para a solução
Asad Abdin
Tente esta solução, ela pode resolver seu problema. clique aqui para a solução
Asad Abdin

Respostas:

139

Você pode apenas alterar a estrutura do projeto para adicionar essa pasta como um diretório de "origem".

Estrutura do projeto → Módulos → Clique na generated-sourcespasta e transforme-a em uma sourcespasta.

Ou:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
DaShaun
fonte
4
Esta opção parece interessante. Eu perderia essa configuração toda vez que executo "mvn idea: idea". Existe uma maneira de declarar um plug-in de ideia do maven com esta "solução alternativa"?
Kannan Ekanath,
3
Você não pode adicionar a pasta de fontes geradas se estiver em construção porque o IDEA exclui a pasta de construção.
NBW
1
@NBW você não pode manualmente, sim. Mas se você deletar seu módulo e depois reimportá-lo (com este plugin configurado), o idea reconhecerá tudo corretamente.
Zoltán
3
Você também pode clicar com o botão direito em qualquer pasta e usar "marcar diretório como"
Pieter De Bie
5
Embora meu pom.xml contivesse esse snippet, o IDEA não viu as fontes geradas. Correr mvn idea:idearesolveu o problema no meu caso. Para registros.
mmdemirbas
76

Estou usando a solução Maven (aplicativo SpringBoot):

  1. Clique com o botão direito na pasta do projeto
  2. Selecione Maven
  3. Selecione Gerar Fontes e Atualizar Pastas

Então, o Intellij importa automaticamente as fontes geradas para o projeto.

Mehmet Hanoglu
fonte
Funciona sem bagunçar a estrutura de pastas!
szab.kel
Esta resposta merece ser melhor - muito mais conveniente do que a resposta aceita
stusrob
4
Observe que na versão mais recente do Intellij 2019.1, você pode clicar no segundo botão no menu do maven (à direita, expandir a barra lateral do maven, no topo, o segundo botão)
Roeland Van Heddegem
Eu também tive que verificar meu maven settings.xml que estava apontando para o repositório não padrão errado
Jonathan
22

Com o gradle, as configurações do projeto serão apagadas sempre que você atualizar as configurações do gradle. Em vez disso, você precisa adicionar as seguintes linhas (ou semelhantes) em seu build.gradle, estou usando kotlin para:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}
Zhywu
fonte
Isso funcionou para mim tanto para a importação de projetos do IntelliJ quanto para gradle idea. Obrigado! :)
Chris Cooper
Sim - melhor dica disponível. George estava ficando com raiva!
Hoobajoob
Funciona para mim também. Usei essa solução com mapstruct, springframework e componentModel = cenário "spring"
dwilda
16

O conserto

Vá para Estrutura do projeto - Módulos - Pastas de código - fonte e localize target/generated-sources/antlr4/com/mycompany- clique em Editar propriedades e defina o prefixo do pacote como com.mycompany.

Esta é exatamente a razão pela qual podemos definir o prefixo do pacote nos diretórios de origem.


Problema diferente, mas relacionado aqui

Vlastimil Ovčáčík
fonte
1
Esta correção é a única que funcionou para mim em DIAS de procura. Obrigado!
user1660256
Obrigado, acabei de atualizar o intellij e eles mudaram seus ícones. Não pensei que a pasta laranja significaria que não é uma fonte.
Pieter De Bie
meio dia estive procurando por isso. Funcionou para mim com antlr4. Obrigado!
Piotr Tempes de
1
Para ANTLR> = 4.5.3 (talvez antes também), contanto que minha gramática estivesse localizada em src/main/antlr4/<path-to-package>/, ela apareceria em target/generated-sources/antlr4/<path-to-package>. O IntelliJ marcou automaticamente o diretório correto como uma raiz de fontes e nenhum prefixo de pacote foi necessário. Suspeito que essa correção seja necessária quando as pessoas colocam suas gramáticas diretamente no src/main/antlr4, o que geralmente é recomendado por algum motivo.
Alex Reinking
5

Quem escreveu esse plugin estragou tudo. Não é assim que se faz!

Qualquer solução alternativa seria um grande hack, informe o desenvolvedor do plugin sobre o bug.

Desculpe, é a única coisa a fazer.


OK, aqui está um hack, diretamente após a execução do seu plugin, use o plugin antrun para mover o diretório para outro lugar:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.6</version>
    <executions>
      <execution>
        <phase>process-sources</phase>
        <configuration>
          <target>
            <move todir="${project.build.directory}/generated-sources/toolname/com"
                  overwrite="true">
                <fileset dir="${project.build.directory}/generated-sources/com"/>
            </move>
          </target>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
</plugin>

Neste exemplo, toolnamedeve ser substituído por qualquer coisa que identifique exclusivamente o plugin que criou o código e comrepresenta a raiz dos pacotes criados. Se você tiver várias raízes de pacote, provavelmente precisará de várias <move>tarefas.

Mas se o plugin adicionar a pasta como pasta de origem, você está ferrado.

Sean Patrick Floyd
fonte
Obrigado Sean. Na verdade, observei que o Intellij adiciona tanto o destino / fontes geradas / com quanto o destino / fontes geradas (isso é adicionado como um diretório de origem explicitamente na seção "recurso"). Existe alguma outra maneira de evitar que a primeira coisa aconteça. Se não, tentarei sua solução alternativa.
Kannan Ekanath,
1
Sim, o autor deve ter uso target/generated-sources/my-tool.
Vlastimil Ovčáčík
1

Talvez você possa adicionar uma etapa à fase de geração de fontes que move a pasta?

Christoffer Hammarström
fonte
1

Tive o mesmo problema com o Eclipse alguns meses atrás, ao importar meu projeto. Agora eu tinha o mesmo com o intelliJ. Aqui está como alguém me ajudou a resolver isso no IntelliJ:

Menu => Exibir => Ferramentas janelas => Projeto Maven No valor spring_user => Executar configuração, escolha instalação limpa. Isso deve fazer uma instalação limpa e depois disso você deve ser capaz de ver as classes insira a descrição da imagem aqui

ElizabethM
fonte
1

Resolvido removendo o "Excluído" na configuração do módulo (clique com o botão direito no projeto, "Abrir configurações do módulo"). insira a descrição da imagem aqui

JP
fonte
0

A única condição de trabalho, após várias tentativas, foi remover a pasta oculta .idea da pasta raiz do projeto e importá-la novamente do Intellij

Jonathan
fonte
0

Eu queria atualizar o comentário feito anteriormente por DaShaun , mas como é minha primeira vez comentando, o aplicativo não permitiu.

No entanto, estou usando o eclipse e, depois de adicionar o trecho de código de menção abaixo ao meu pom.xml, conforme sugerido por Dashun, e executei o pacote mvn clean para gerar os arquivos de origem avro, mas ainda estava obtendo erro de compilação no espaço de trabalho.

Cliquei com o botão direito em project_name -> maven -> update project e atualizei o projeto, que adicionou o target / generated-sources como uma pasta de origem para meu projeto eclipse.

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>
anupam
fonte