2016-05-29 20 views
6

Proje, derleme sırasında java kodu üreten ek açıklama işlemcisi içerir. Varsayılan olarak, grapt çıkışları kaynak dosyaları build/classes dizinine oluşturdu. Bu yeni oluşturulan kaynak dosyaların IntelliJ tarafından keşfi ile bazı sorunlara neden olur.Oluşturulan kodun çıkış dizinini dize olarak değiştirme

Başka bir dizine kaynak dosyalarının çıkışını yapmak için dikey yapılandırmanın herhangi bir yolu var mı? Örneğin $buildDir/gen/main/java veya $buildDir/build/generated/main/java?

cevap

9

Oluşturulan java kaynakları için çıktı dizinini özelleştirmeye izin veren java derleyicisi için bir seçenek var (documentation).

nerede oluşturulan kaynak dosyalarını yerleştirmek için dizini belirtin dir -s. dizini önceden mevcut olmalıdır; javac onu yaratmayacak. Bir sınıf paketin bir parçasıysa, derleyici, kaynak dosyayı paket adını yansıtan bir alt dizine gönderir ve gerektiğinde dizinler oluşturur. örneğinde, -s C: \ mysrc belirtirseniz ve sınıf com.mypackage.MyClass olarak adlandırılırsa, kaynak dosya C: \ mysrc \ com \ mypackage \ MyClass.java içine yerleştirilir.

Örnek build.gradle

compileJava { 
    options.compilerArgs << "-s" 
    options.compilerArgs << "$projectDir/generated/java" 

    doFirst { 
     // make sure that directory exists 
     file(new File(projectDir, "/generated/java")).mkdirs() 
    } 
} 

clean.doLast { 
    // clean-up directory when necessary 
    file(new File(projectDir, "/generated")).deleteDir() 
} 

sourceSets { 
    generated { 
     java { 
      srcDir "$projectDir/generated/java" 
     } 
    } 
} 

Bu kod parçacığı sonraki yapar:

  • oluşturur ve oluşturulan kodu için çıktı olarak dizinini belirtir
  • temiz görev çağrılır ise oluşturulan kaynaklar siler
  • , yeni kaynak kümesini ekler

Güncelleme

Kullanım gradle apt plugin yerine.

+0

Çözüm için teşekkürler - bu benim için harika çalışıyor, bir tweak ile oluşturulan dosyaları "$ project.buildDir/generated/java" içine koymayı tercih ediyorum, çünkü bu, değiştirme konusunda endişelenmenize gerek olmadığı anlamına geliyor ne kadar temiz çalışıyor. Ayrıca, aslında işe yarayan bir kaynak kümesi eklemenin gerekmediği görülüyor. –

+0

Herhangi biri başka bir sonraki derlemelerde bir java derleme hatasına girerse .. doFirst bloğuna aşağıdakileri ekleyin: 'GFileUtils.cleanDirectory (directory); '' graderinize bağlı olarak 'FileUtils.cleanDirectory' – Darwayne

+0

@ PetterMåhlén'i kullanmanız gerekebilir, bu yüzden sourceSet yapılandırması isteğe bağlıdır? gradle, oluşturulan sınıfları içeren bir kavanoz oluşturmak için ona ihtiyaç duyar. – Sunnyday

1

Basitçe build.gradle dosyasında project.buildDir özellik için değer belirtin:

project.buildDir = '/gen/main/java' 

Bu <project_root>/gen/main/java klasöre dosya oluşturmak, oluşturulan tüm koyacağız.

+0

Bu sadece en iyi çözüm değil, aynı zamanda derleyicinin çıktısını da bu dizine yerleştirecektir (.class dosyaları ve kaynak kodunuzda olmasını istemediğiniz diğer şeyler). –

İlgili konular