Intellij, oluşturulmuş bir kaynaklar klasörüyle kullanılamıyor


87

İlgili soru IntelliJ IDEA ve / veya Maven, jaxb2-maven-eklentisi kullanılarak oluşturulan Java kaynak kodlu dizinleri otomatik olarak ekleyecek şekilde nasıl yapılandırılır?

target/generated-sources(Burada araç adı olmadığını unutmayın) altında kaynaklar oluşturan özel bir eklentim var . Bu yüzden target/generated-sources/com/mycompany... vb gibi kaynaklar alıyorum .

Bu format hiç değiştirilemez, bu yüzden Intellij'i bir kaynak klasör olarak ekleyecek şekilde yapılandırabileceğim. Şu an itibariyle Intellij'in target/generated-sources/comkaynak klasör olarak eklendiğini görebiliyorum .

Lütfen eklentiyi yapılandırma seçeneğim olmadığını unutmayın!

GÜNCELLEME 1 : Üretilen kaynaklarımı bir araç adı klasörünün altına KOYMAM GEREKTİĞİ gerçeğine katılmıyorum. İyi bir kongre olabilir, ancak tek bir jeneratörüm varsa oraya koymama gerek yok mu? Yine, pom.xml dosyamda bunun bir kaynak klasör olarak değerlendirilmesi gerektiğini resourcesaçıkça belirten bir bölümüm var target/generated-sources. Bu Eclipse'de gayet iyi çalışıyor, bu yüzden Intellij'in ayarlarıma neden saygı duymayacağı hakkında hiçbir fikrim yok.

TL; DR -> ı koyduğunuzda target/generated-sourceskaynak bölümü içindeki pom.xmleklemek için Intellij hevesli olmasının nedeni target/generated-sources/comsınıf için?



Bu çözümü deneyin, sorununuzu çözebilir. çözüm için buraya tıklayın
Asad Abdin

Bu çözümü deneyin, sorununuzu çözebilir. çözüm için buraya tıklayın
Asad Abdin

Yanıtlar:


141

Bu klasörü "kaynak" dizin olarak eklemek için proje yapısını değiştirebilirsiniz.

Proje Yapısı → Modüller →generated-sources Klasöre tıklayın ve bir sourcesklasör yapın.

Veya:

<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>

4
Bu seçenek kulağa ilginç geliyor. "Mvn idea: idea" öğesini her çalıştırdığımda bu ayarı kaybederim. Bu "geçici çözüm" ile bir maven fikir eklentisi ilan etmenin bir yolu var mı?
Kannan Ekanath

3
Oluşturulan kaynaklar klasörünü, oluşturulmuşsa ekleyemezsiniz çünkü IDEA, yapı klasörünü hariç tutar.
NBW

1
@NBW el ile yapamazsınız, evet. Ancak modülünüzü silip yeniden içe aktarırsanız (bu eklenti kurulumuyla), fikir her şeyi doğru bir şekilde tanır.
Zoltán

3
Ayrıca herhangi bir klasöre sağ tıklayıp "dizini farklı işaretle" seçeneğini kullanabilirsiniz
Pieter De Bie

5
Pom.xml'm bu pasajı içermesine rağmen, IDEA oluşturulan kaynakları görmedi. mvn idea:ideaBenim durumumda koşmak sorunu çözdü. Kayıtlar için.
mmdemirbas

83

Maven (SpringBoot uygulaması) çözümünü kullanıyorum:

  1. Proje klasörüne sağ tıklayın
  2. Maven'i seçin
  3. Kaynak Oluştur ve Klasörleri Güncelle'yi seçin

Ardından Intellij, oluşturulan kaynakları projeye otomatik olarak aktarır.


Klasör yapısını kendiniz bozmadan çalışır!
szab.kel

Bu cevap daha yüksek olmayı hak ediyor - kabul edilen cevaptan çok daha uygun
stusrob

5
Intellij 2019.1'in en son sürümünde, maven menüsündeki ikinci düğmeyi tıklayabileceğinizi unutmayın (sağda, maven kenar çubuğunu genişletin, üstte, ikinci düğme)
Roeland Van Heddegem

Ayrıca, varsayılan değil yanlış depoya işaret eden maven settings.xml'mi de kontrol etmek zorunda kaldım
Jonathan

Cazibe gibi çalışıyor!
marcin.programuje

22

Gradle ile, gradle ayarlarını her yenilediğinizde proje ayarları silinecektir. Bunun yerine, build.gradle dosyanıza aşağıdaki satırları (veya benzerlerini) eklemeniz gerekiyor, ben kotlin kullanıyorum:

sourceSets {
    main {
        java {
            srcDir "${buildDir.absolutePath}/generated/source/kapt/main"
        }
    }
}

Bu benim için hem IntelliJ'in proje ithalatı hem de gradle idea. Teşekkürler! :)
Chris Cooper

Evet - mevcut en iyi ipucu. George sinirleniyordu!
Hoobajoob

Benim için çalışıyor. Bu çözümü mapstruct, springframework ve componentModel = "spring" senaryosu ile kullandım
dwilda

16

Çözüm

Git Proje Yapısı - Modüller - Kaynak klasörler ve bulmak target/generated-sources/antlr4/com/mycompany- tıklayın Düzenleme özelliklerini ve set Paketi öneki için com.mycompany.

Kaynak dizinlerde Paket önekini ayarlayabilmemizin nedeni budur .


Burada farklı ama ilgili sorun


1
Bu düzeltme, DAYS baktığımda benim için işe yarayan tek düzeltme. Teşekkürler!
CNDyson

Oh teşekkürler, istihbaratı yeni güncelledim ve simgelerini değiştirdiler. Turuncu klasörün bir kaynak olmadığı anlamına geleceğini düşünmemiştim.
Pieter De Bie

Yarım gün bunu arıyordum. Benim için antlr4 ile çalıştı. Teşekkürler!
Piotr Tempes

1
ANTLR> = 4.5.3 için (belki daha erken de), dilbilgim bulunduğu sürece içinde src/main/antlr4/<path-to-package>/görünecektir target/generated-sources/antlr4/<path-to-package>. IntelliJ, doğru dizini bir kaynak kökü olarak otomatik olarak işaretledi ve herhangi bir paket öneki gerekmedi. İnsanlar gramerlerini doğrudan yerleştirdiklerinde bu düzeltmenin gerekli olduğundan şüpheleniyorum src/main/antlr4, bu genellikle bazı nedenlerden dolayı önerilir.
Alex Reinking

5

Bu eklentiyi kim yazdıysa büyük bir hata yaptı. Bunu yapmanın yolu bu değil!

Herhangi bir geçici çözüm, eklenti geliştiricisinin hatasından haberdar olmasını sağlamak için büyük bir hack olacaktır.

Üzgünüm, yapılacak tek şey bu.


Tamam işte bir hack, eklentinizin çalıştırılmasından hemen sonra, dizini başka bir yere taşımak için antrun eklentisini kullanın:

<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>

Bu örnekte, toolnamekodu oluşturan eklentiyi benzersiz bir şekilde tanımlayan comve oluşturulan paketlerin kökünü temsil eden herhangi bir şeyle değiştirilmelidir . Birden çok paket kökünüz varsa, muhtemelen birden çok <move>göreve ihtiyacınız vardır .

Ancak eklenti, klasörü kaynak klasör olarak eklerse, mahvolursunuz.


Teşekkürler Sean. Aslında Intellij'in hem hedef / üretilen-kaynaklar / com hem de hedef / üretilen-kaynakları eklediğini gözlemledim (bu, "kaynak" bölümüne açıkça bir kaynak dizin olarak eklenmiştir). İlk şeyin olmasını engellemenin başka bir yolu var mı? Hayır ise, çözümünüzü deneyeceğim.
Kannan Ekanath

1
Evet, yazarın kullanması gerekir target/generated-sources/my-tool.
Vlastimil Ovčáčík


1

Birkaç ay önce projemi içe aktarırken Eclipse ile aynı sorunu yaşadım. Şimdi intelliJ'de de aynısını yaşadım. IntelliJ'de bunu çözmeme birisi şu şekilde yardımcı oldu:

Menü => Görünüm => Araçlar windows => Maven Projesi spring_user değeri => Yapılandırmayı Çalıştır'da temiz yüklemeyi seçin. Bu temiz bir kurulum yapmalı ve bundan sonra sınıfları görebilmelisiniz. görüntü açıklamasını buraya girin


1

Modül ayarındaki "Hariç Tutulan" seçeneğini kaldırarak çözdü (projeye sağ tıklayın, "Modül ayarlarını aç"). görüntü açıklamasını buraya girin


0

Birkaç denemeden sonra tek çalışma koşulu, gizli .idea klasörünü kök proje klasöründen kaldırmak ve Intellij'den yeniden içe aktarmaktı.


0

Daha önce DaShaun tarafından yapılan yorumu güncellemek istedim , ancak ilk kez yorum yaptığım için uygulama bana izin vermedi.

Bununla birlikte, eclipse kullanıyorum ve Dashun tarafından önerildiği gibi pom.xml'ime aşağıdaki kod parçacığını ekledikten sonra avro kaynak dosyalarını oluşturmak için mvn temiz paketini çalıştırdım, ancak çalışma alanında hala derleme hatası alıyordum.

Project_name -> maven -> update projesine sağ tıkladım ve hedef / üretilen-kaynakları eclipse projeme kaynak klasör olarak ekleyen projeyi güncelledim.

<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>

0

mvn generate-resources komutunu çalıştırdım ve ardından / target / generated-resources klasörünü "kaynaklar" olarak işaretledim (Proje Yapısı -> Proje Ayarları -> Modüller -> Seç / hedef / oluşturulan-kaynaklar -> Mavi "Kaynaklar" simgesine tıklayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.