2015-11-02 13 views
6

'u çözüyor Bu bana ve tüm takım arkadaşlarıma bir noktada başlıyor ve bunun ne olduğunu ve bunun nasıl çözüleceğini anlayamıyoruz.
Çalışma alanlarımızda hepimiz aynı Java projelerine sahibiz. Project menüsünde hepimizin Build automatically işaretli olması.
Çalışma alanımın derleme hataları olmadığını varsayalım. Java sınıflarından birine önemsiz bir değişiklik yapıyorum, kaydediyorum, Eclipse yeniden inşa etmeye başlar ve sonuç olarak yüzlerce sınıf - birden fazla projede - derleme hataları var. Bazı nedenlerden dolayıifadesinin çoğu artık hatasını gösteriyor. İçe aktarma [xxx], çözümlenemiyor.
Ancak import s (ve bu konuyla ilgili tüm çalışma alanı), önemsiz, tamamen ilgisiz değişiklikimi kaydetmeden önce kusursuz bir şekilde hatasız oldular ve hepsi bu noktada mükemmel bir hataya geri dönüyorlarsa, Project/Clean tabiki bir çalışma alanının yeniden oluşturulmasını tetikler. Çalışma alanı klasöründe yer alan .log dosyası hiçbir şey göstermez; kaydetmeden önce boşsa, kaydetmemden sonra bu hatalar hala boş görünüyor. Bütün çalışma alanını inşa dakika sürebilir çünküEclipse Mars, kaydetmeden sonra sürekli olarak ithalatı çözümlemede başarısız oluyor, ancak projeleri tek başına temizlemek

Bu, bu gelebilir yol daha rahatsız edici olduğunu ve sadece Project/Clean beri tüm yine bu bizim kodunda yanlış bir şey nedeniyle olamaz import s çalışmalarını başarısız kılar.

Bunun uzun bir atış olduğunu biliyorum, ancak bu konunun bizim için ne kadar tekrarlanabilir olduğunu düşünerek (bazı bilgisayarların% 100'ünde% 100'ü) belki de başka biri aynı soruna sahipti ve nedenini ya da çözümünü keşfetti.

sürümüdür Biz gradlew.bat işaret Dış Aracı Yapılandırmalarınız oluşturarak Gradle (2.6) kullanan Web Geliştiriciler,

Windows 8 üzerinde Mars.1 Release (4.5.1), için Eclipse Java EE IDE ve bir dize ile. Bunları, Eclipse'e aktardıktan sonra (dize satırına eclipse girerek) ve dağıtıma yönelik JAR'ları oluşturmak için (el ile build dize komut satırına girerek) projeyi yapılandırmak için el ile çalıştırıyoruz, ancak Gradle'ın Eclipse tarafından sorunlu inşa.

EKLENDİ:

  • İlk durum: Mevcut hiçbir hata (çünkü hangi olabilir Ben şu olur, çünkü bu sorun,% 100 tekrarlanabilir olduğunu söylemek doğru değil artık eminim Tüm projeleri temizledim ve kaydedilmemiş değişiklikler.

  • Düzenleyicideki bir sınıfta değişiklik yapıyorum, kaydediyorum ve bu hatalar üretir.

  • Bu değişikliği geri alıyorum, kaydedin ve temizleyin; bu yüzden tam olarak başlangıç ​​durumuna geri döndüm.

  • Bu değişikliği yeniden yapıyorum (özdeş), ben kaydediyorum ve bu kez hataları alamıyorum.

EKLENDİ:

1) Minör ve majör sürümleri her zaman olursa olsun .class dosya ile inşa var aynıdır: oluşturulan .class dosyaları incelemek için javap kullanma, ben 2 Aşağıdaki şeyleri fark hatalar veya olmadan (küçük sürüm: 0; büyük sürüm: 51). Tabii ki .class dosya hatalar ile inşa edildiğinde hata mesajları içermediği halde hata mesajlarını içerdiği zaman hata mesajlarını içermiyor. Her iki .class dosyalar için javap çıkışlarını karşılaştırılması

2), yaklaşık bir çizgi kadar "sabit havuzu" bölümünde çizgileri sınıf üyeleri ve nesnelerin isimlerini gösteren (aynı olduğu f.ex Ljava/lang/String;) içine bakın sorunlu .class dosya

#32 = Utf8 LMyClassImpl;

ve doğru .class dosyası olan bir sınıf my.package.MyClassImpl, aynı fakat tam var

#32 = Utf8 Lmy.package.MyClassImpl;

Ben bu sorunla ilgisi var eminim.

EKLENDİ:Ben Java/Compiler/Building/Output folder altında Eclipse tercihlerinde onay kutusunu “başkaları tarafından modifiye sınıf dosyaları yeniden” kene varsa sorun kaybolur. En azından, belirli bir değişikliğin problemi gösterdiği tüm durumlar artık gösterilmiyor. Bu yalnızca bir çözümdür ve kök nedenini araştırmaya devam ediyorum, ancak bu sorun büyük bir rol oynamaktadır. Eclipse’s internal Java compiler bu sorunda önemli bir rol oynamaktadır.

EKLENDİ: Aşağıda projelerin ikisinin .classpath ve .project dosyaların içeriğidir. İlk proje bu derleme hatalarını gösteren bir projedir. İkinci proje asla yapmayan bir şey. 30.000 karakter sınırlaması nedeniyle tek bir dosyada .... ile birçok satırı değiştirmek zorunda kaldım ve nasıl dosya ekleyeceğimi göremiyorum; Buna izin verilirse ve birisi bana bunu nasıl yapacağımı gösterirse, bunları kesinti olmadan iliştiririm ve içeriğinden soruları kaldırırım.

Not ilk .classpath bir girdi excluding="**/*.class" sahiptir ve ikinci yapmaz ilginç farkı. Ancak ben de (onların excluded:**/*.class çıkan .classpath dosyaları kaldırarak bu girdiyi var ama derleme hataları zaten görünmüyor Eclipse (Proje Özellikleri/Java Build Path/Kaynak) aracılığıyla buna sahip tüm projelerin Java Build yol değiştirdiğinizde Eclipse'i yeniden başlattıktan sonra). Ben tam tersini yaparsanız bu girdiyi ancak derleme hataları halen görülüyor olsun o zaman tüm projelerin .classpath dosyaları (yani bu yok tüm projelere excluded:**/*.class ekleyin). Bunun problemi çözeceğine bahse girerdim ama olmaz.

MyProjectThatGetsErrors: .project dosyası:

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>MyProjectThatGetsErrors</name> 
    <comment/> 
    <projects/> 
    <natures> 
     <nature>org.eclipse.jdt.core.javanature</nature> 
    </natures> 
    <buildSpec> 
     <buildCommand> 
      <name>org.eclipse.jdt.core.javabuilder</name> 
      <arguments/> 
     </buildCommand> 
    </buildSpec> 
    <linkedResources/> 
</projectDescription> 

MyProjectThatGetsErrors: .classpath dosyası:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry excluding="**/*.class" kind="src" path="src/main/java"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="src" path="/MyUtilsProject1"/> 
    <classpathentry kind="src" path="/MyUtilsProject2"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/org.eclipse.jetty/jetty-io/8.1.15.v20140411/8849cf59187275366cd05f37b2fb71319291370b/jetty-io-8.1.15.v20140411.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/org.eclipse.jetty/jetty-io/8.1.15.v20140411/49fd78caf4ca0c7cdbc532fc48ff46183bb8fb62/jetty-io-8.1.15.v20140411-sources.jar"/> 
.... 
.... 
    <classpathentry kind="lib" path="D:/EclipseMars/git/MyProjectThatGetsErrors/lib/tapestry5-highcharts-1.2.0.jar"/> 
    <classpathentry kind="output" path="bin"/> 
</classpath> 

MyUtilsProject1: .project dosyası:

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>MyUtilsProject1</name> 
    <comment/> 
    <projects/> 
    <natures> 
     <nature>org.eclipse.jdt.core.javanature</nature> 
    </natures> 
    <buildSpec> 
     <buildCommand> 
      <name>org.eclipse.jdt.core.javabuilder</name> 
      <arguments/> 
     </buildCommand> 
    </buildSpec> 
    <linkedResources/> 
</projectDescription> 

MyUtilsProject1: .classpath dosyası:

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src/main/java"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-digester/commons-digester/1.8/dc6a73fdbd1fa3f0944e8497c6c872fa21dca37e/commons-digester-1.8.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-digester/commons-digester/1.8/6c296de7dc352e0af9a40f92f5af995314d41fc9/commons-digester-1.8-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.3.2/90a3822c38ec8c996e84c16a3477ef632cbc87a3/commons-lang3-3.3.2.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-lang3/3.3.2/d2a489573c0ed2c4942b3660decad5d65087b406/commons-lang3-3.3.2-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-configuration/commons-configuration/1.6/32cadde23955d7681b0d94a2715846d20b425235/commons-configuration-1.6.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-configuration/commons-configuration/1.6/2d24067548bf9022d03cfd6ca302e1f6c5d4936/commons-configuration-1.6-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-fileupload/commons-fileupload/1.2/a10c06183fe21f3bb3dda3b5946b93db6e2ad5cc/commons-fileupload-1.2.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-fileupload/commons-fileupload/1.2/c7859b375ae5bc1b4a4f2b91ce6d1d387e676e61/commons-fileupload-1.2-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-beanutils/commons-beanutils-core/1.8.0/175dc721f87e4bc5cc0573f990e28c3cf9117508/commons-beanutils-core-1.8.0.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/org.apache.velocity/velocity/1.7/2ceb567b8f3f21118ecdec129fe1271dbc09aa7a/velocity-1.7.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/org.apache.velocity/velocity/1.7/eb11eb70171ed64842b2e5216d5904e21ed162ac/velocity-1.7-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-collections/commons-collections/3.2.1/761ea405b9b37ced573d2df0d1e3a4e0f9edc668/commons-collections-3.2.1.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-collections/commons-collections/3.2.1/fa095ef874374e5b2a11f8b06c26a5d68c7cb3a4/commons-collections-3.2.1-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-beanutils/commons-beanutils/1.7.0/5675fd96b29656504b86029551973d60fb41339b/commons-beanutils-1.7.0.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-beanutils/commons-beanutils/1.7.0/b68c4fc66026e8c08df7fb57c7dc1e94a6ed8cbb/commons-beanutils-1.7.0-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-lang/commons-lang/2.4/16313e02a793435009f1e458fa4af5d879f6fb11/commons-lang-2.4.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-lang/commons-lang/2.4/2b8c4b3035e45520ef42033e823c7d33e4b4402c/commons-lang-2.4-sources.jar"/> 
    <classpathentry kind="lib" path="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.1/5043bfebc3db072ed80fbd362e7caf00e885d8ae/commons-logging-1.1.1.jar" sourcepath="C:/Users/Me/.gradle/caches/modules-2/files-2.1/commons-logging/commons-logging/1.1.1/f3f156cbff0e0fb0d64bfce31a352cce4a33bc19/commons-logging-1.1.1-sources.jar"/> 
    <classpathentry kind="lib" path="D:/EclipseMars/git/MyUtilsProject1/lib/MyCompany cayenne-client-3.0.2.jar"/> 
    <classpathentry kind="output" path="bin"/> 
</classpath> 

EKLENDİ: farklı bir Git dalına geçiş veya tabii bu derleme hatası görünmesine neden olan benim çalışma alanı içine değişiklikleri çekin bazen Eclipse Java Builder bir NullPointerException ilgili bir hata iletişim kutusu gösterir ve bu durumda o (aşağıya stacktrace bakınız) günlüğüne yazmak yapar. Ancak, bu hataların ortaya çıktığı zamanların% 99'u böyle bir boş gösterici değildir.

!ENTRY org.eclipse.core.resources 4 75 2015-11-10 13:51:31.544 
!MESSAGE Errors occurred during the build. 
!SUBENTRY 1 org.eclipse.jdt.core 4 75 2015-11-10 13:51:31.544 
!MESSAGE Errors running builder 'Java Builder' on project 'MyProject'. 
!STACK 0 
java.lang.NullPointerException 
    at org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding$2.compare(ReferenceBinding.java:92) 
    at org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding$2.compare(ReferenceBinding.java:1) 
    at java.util.TimSort.binarySort(TimSort.java:265) 
    at java.util.TimSort.sort(TimSort.java:208) 
    at java.util.Arrays.sort(Arrays.java:727) 
    at org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.sortFields(ReferenceBinding.java:217) 
    at org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.fields(BinaryTypeBinding.java:946) 
    at org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.fields(ParameterizedTypeBinding.java:458) 
    at org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.getField(ParameterizedTypeBinding.java:643) 
    at org.eclipse.jdt.internal.compiler.lookup.Scope.findField(Scope.java:1371) 
    at org.eclipse.jdt.internal.compiler.ast.FieldDeclaration.resolve(FieldDeclaration.java:194) 
    at org.eclipse.jdt.internal.compiler.lookup.FieldBinding.constant(FieldBinding.java:215) 
    at org.eclipse.jdt.internal.compiler.lookup.FieldBinding.constant(FieldBinding.java:240) 
    at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.getOtherFieldBindings(QualifiedNameReference.java:729) 
    at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.resolveType(QualifiedNameReference.java:1079) 
    at org.eclipse.jdt.internal.compiler.ast.ReturnStatement.resolve(ReturnStatement.java:341) 
    at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641) 
    at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:309) 
    at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551) 
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1188) 
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1301) 
    at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:590) 
    at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:861) 
    at org.eclipse.jdt.internal.compiler.ProcessTaskManager.run(ProcessTaskManager.java:141) 
    at java.lang.Thread.run(Thread.java:744) 
+1

Eğer örneğin ikinci, dış inşa aracı, kullanıyorsunuz Maven? –

+0

@CedricReichenbach İyi bir nokta, sadece sorunun altındaki bu bilgi eklendi, ben yapmış gerektiğini başından beri. Maven'in Eclipse tarafından tetiklenen sorunlu yapıya karıştığından emin değilim, ama kesinlikle olabilirdi ve kesinlikle emin olmalıyım ki, yine de söylemeliyim. – SantiBailors

+1

Tamam, benzer bir sorun var gibi görünüyor. Ne gözlemledim: Hatalar sadece yeni kaydettiğim dosyalarda görünür ve başarısız olan tüm bağımlılıklarım kendi projelerimin içindeki sınıflara işaret eder (yapı kapsamında). Bu nedenle, Eclipse muhtemelen her seferinde bir dosyayı otomatik olarak derler ve bazı nedenlerden ötürü diğerlerinin zaten oluşturulduğunu düşünür, ancak bu sınıf dosyaları ya var olmayan ya da uyumsuzdur. Gradle ve Eclipse'de kullanılan Java sürümlerini karşılaştırdınız mı? –

cevap

3

Ben senin sorunun kök Eclipse projelerinizi yapılandırmak nasıl Eclipse anlatmak için Gradle kullanmaya çalışıyorsanız olmasından kaynaklanmaktadır şüpheli. Gradle (veya Maven) ve Eclipse arasında biraz çatışma var; Maalesef, Gradle (ve Maven) ekipleri, IDE konfigürasyonları oluşturmak için inşa aracının iyi olduğu fikrini itti. IDE (ve onu kullanan geliştirici), proje yapılandırma dosyalarını oluşturmak ve yönetmek için sorumlu olmalıdır.

Eclipse

yükleyip yapılandırmak ve içlerindeki build.gradle dosyalarına dayalı doğru Eclipse projeleri sürdürmeyi tam olarak nasıl bilir olabilir Gradle takım vardır. Buna Buildship denir. install Buildship'u kesinlikle öneririm ve projeleri Eclipse çalışma alanınıza aktarmak için kullanın. Düzgün yanı sıra düzgün Eclipse'nın derleyici yapması gereken iş ve Gradle kendisi yüzden çelişmeyen yapması gereken işi koordine Yapınızın dosyalarında listelenen bağımlılıkları ile senkronize kalır bir Sınıfyolu Kapsayıcı kuracak herbiri.

Ayrıca güzel Gradle görevleri kolayca Eclipse (ev yapımı Harici Araçlar yapılandırmasını değiştirme) içinden Gradle görevleri çağırmak için kullanabileceği görüntülemek sağlar.

+0

Sorgunun düzeltilmesi için teşekkürler, artık daha iyi ve Eclipse ile Gradle aracılığıyla yapılan proje yapılandırması arasındaki olası çakışmalar hakkında bilgi için; Gradle fikrinin bir proje konfigürasyon aracı olmaktan çok bir inşa aracı (büyük bir) olmasıyla ilgili olabileceğini düşünüyorum. Buildship'e bakacağım ve takım arkadaşlarıma aynı şeyi yapmalarını ve muhtemelen kullanmaya karar vermelerini isteyeceğim. Eğer siz (veya herhangi biri) Gradle'ın yapılandırma görevleri için çok uygun olmadığı fikrini tartışıyorsanız (genel olarak veya Buildship ile karşılaştırıldığında) bu çok yararlı olacaktır. – SantiBailors

İlgili konular