java - يعطي الفحص IntelliJ "لا يمكن حل رمز" ولكن لا يزال يجمع التعليمات البرمجية




maven intellij-idea (20)

النظام الأساسي: IntelliJ Community Edition 10.0.3
SDK: jdk1.6.0_21
نظام التشغيل: ويندوز 7

لذلك لدي موقف غريب مع IntelliJ الذي أزعجني تماما. أقوم بإعداد مشروع Maven وأضف log4j كاعتمادية في ملف pom.xml. عمليات تفتيش IDEA تعمل بشكل جيد واختبار وحدتي كل ترجمة وتشغيل.

ثم قمت بإضافة مكتبة jmime الخاصة بـ hunnysoft إلى مخزن mavn المحلي باستخدام تثبيت mvn: install-file على النحو التالي.

mvn install:install-file -Dfile=jmime.jar -DgroupId=jmime \
-DartifactId=jmime -Dversion=3.1.1e -Dpackaging=jar

قام Maven بتثبيت ملف jar بشكل جيد في المستودع المحلي الخاص بي.

ثم انتقلت إلى إعدادات IntelliJ => Maven => خدمات Repository وتحديث مستودع محلي (بحيث يقوم IntelliJ بإعادة تصحيح محتويات المستودع).

وأخيرًا ، أضفت التبعية التالية إلى ملف pom.xml الخاص بي (فقط فوق تبعية log4j).

<dependency>
    <groupId>jmime</groupId>
    <artifactId>jmime</artifactId>
    <version>3.1.1e</version>
</dependency>

أنا الآن إنشاء فئة جديدة على النحو التالي:

package com.stackoverflow.question;

import org.apache.log4j.Logger;
import com.hunnysoft.jmime.ByteString;
import com.hunnysoft.jmime.Field;
import com.hunnysoft.jmime.FieldBody;

public class StackOverflowQuestion {
    public Field create(String name, String text) {
        Logger.getLogger(getClass()).debug("create entered");
        FieldBody body = new FieldBody();
        body.setText(new ByteString(text));
        Field field = new Field();
        field.setFieldName(name);
        field.setFieldBody(body);
        return field;
    }
}

الآن للغرابة. تلتقط آلية intelliJ نية وتعرف على استيراد Logger في ملف maven pom على ما يرام. ومع ذلك ، بالنسبة لجميع واردات hunnysoft ، فإنها تشير إلى: "لا يمكن حل الرمز" ByteString / Field / FieldBody '"، BUT Build => ترجمة' StackOverflowQuestion.java 'تقوم بتصنيف كل شيء بشكل صحيح ويتم اختبار الوحدة التي قمت بإنشائها لهذه الفئة بشكل جيد (على الرغم من تشير النوايا إلى المكالمة لإنشاء () كمنطقة مشكلة أيضًا).

حتى في مكان ما ، IntelliJ بطريقة ما يتجاهل ملف jmime.jar للنظام الفرعي النية. أنا مرتبك لأن الاعتماد على log4j يعمل بشكل جيد وكل شيء يجمع ويدير بشكل جيد. F12 ("Go To Declaration") يعمل على استيراد Logger ، ولكنه يكسر جميع واردات jmime.

أوه ، شيء آخر ، إذا ذهبت إلى عرض "الحزم" في نافذة "المشاريع" ، تظهر حزمة "com.hunnysoft.jmime" ويمكنني رؤية جميع الطبقات التي قمت باستيرادها في مقتطف الشفرة أعلاه تحت عنوان "المكتبات" . تؤدي إزالة الاعتمادية المذكورة أعلاه من ملف pom.xml إلى اختفاء هذه الحزمة وتجزئة التصنيف.

يبدو أن فاصل الصف الدراسي للفحص مكسور ، ولكن لا يبدو أنه يوجد إعداد لهذا في أي مكان في الإعدادات => النوايا | مناطق المجمّع (ليس هذا ما كنت أتوقعه من مثل هذه الإعدادات ، أعتقد أن IDEA يجب أن يعرف بالفعل مسار الصنف القائم على ملف pom و JDK).

كتجربة أخيرة قمت بإنشاء مشروع تطبيق J2SE قياسي جديد (بدون استخدام maven) وأضفت ملف jmime.jar مباشرة إلى المشروع كواحدة من مكتباته. أواجه نفس المشاكل بالضبط كما هو موضح أعلاه في هذا المشروع الجديد.

هنا هو MANIFEST.MF من ملف jmime jar.

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.5.4
Created-By: 10.0-b23 (Sun Microsystems Inc.)

Name: com/hunnysoft/jmime/
Sealed: true
Specification-Title: Hunny JMIME
Specification-Version: 3.1.1
Specification-Vendor: Hunny Software, Inc.
Implementation-Title: com.hunnysoft.jmime
Implementation-Version: 3.1.1E
Implementation-Vendor: Hunny Software, Inc.

لا أرى أي شيء غير عادي في ملف الجرة هذا.

أفضل تخميني هو أنه ربما تكون المشكلة مشكلة تبعية مفقودة. ولكن من المفترض أن يكون AFAIK jmime مستقلاً (JarAnalyzer لا يأتي بأي شيء ، لكنني لست متأكداً من أنه سيكون في حالة فقدان وعاء التبعية).

لذلك ، أي شخص لديه أي IDEAs؟


  1. أفتح الإعدادات"
  2. البحث عن "مخضرم"
  3. انقر على "الملفات المتجاهلة" تحت عنوان "مخضرم"
  4. قم بإلغاء تحديد ملفات pom.xml يحتوي على تبعيات مفقودة
  5. انقر فوق موافق"
  6. انقر فوق ملف -> Invalidate Caches / Restart ...
  7. انقر على "Invalidate and Restart"

أو ربما يكون الملف الذي تستورده كبيرًا جدًا. هذا هو حالتي ، عندما أغير خاصية Intellij: iead.max.intellisen.filesize (المسار $ $ idea} /bin/idea.properties) إلى قيمة أكبر ، مثل 25000 ، وإعادة تشغيل IDE ، اختفت المشكلة. أتمنى أن يساعدك هذا.


أي من الحلول المذكورة أعلاه عملت بالنسبة لي. ما كان إزالة الملف main.iml يدويا وعمل فجأة.


إذا كنت مشروع maven ، فما عليك سوى الانتقال إلى الإعدادات -> أدوات البناء -> maven -> importing. حدد مربع الاختيار "import maven project تلقائيًا". سوف تحل المشكلة.


بادئ ذي بدء ، يجب عليك محاولة File | Invalidate Caches File | Invalidate Caches وإذا لم يساعد ، احذف دليل نظام IDEA . ثم إعادة استيراد مشروع مافن ومعرفة ما إذا كان يساعد.

في بعض الحالات الغريبة ، قد تقوم الفئات التي تم جمعها بإبلاغ معلومات خاطئة وتشويش IDEA. تحقق من أن الفئات من هذه الجرة تشير إلى أسماء صحيحة باستخدام javap .


بالنسبة إلى Idea 2017.1 + Gradle ، يكون المكون الإضافي عبارة عن عربات التي تجرها الدواب بشكل أو بآخر. حاول كل تزامن ، يبطل + إعادة تشغيل ، لا شيء يعمل. وفقا ل https://github.com/gradle/gradle/issues/2315 ، هذا العمل بالنسبة لي: 1. إغلاق فكرة 2. اكتب فكرة جديلة في سطر الأوامر (يجب أن تولد 3 ملفات: .iml ، .ipr ،. iws) 3. تشغيل الفكرة وفتح الملف الذي تم إنشاؤه .ipr ، يجب أن يستورد هذا المشروع من الصفر ، مع تبعيات صلبة في تلك الملفات الثلاثة


بعد إبطال ذاكرة التخزين المؤقت وإعادة التشغيل ؛ وتأكيد إعدادات بلدي مخضر كانت بخير ، كنت ما زلت أرى "لا يمكن حل رمز" لوحدة نمطية أنا بالتأكيد قد حددت كاعتمادية. اتضح أنه قد تم ضبطه على نطاق الخطأ.

يمكنك التحقق من خلال النقر بزر الماوس الأيمن على الوحدة الخاصة بك وتحديد إعدادات Open Module. انقر فوق علامة تبعية التبعية وتحقق من تعيين نطاق التبعية un-resolvable إلى Compile.


حلت الخدعة التالية هذه المشكلة بالنسبة لي:

  • انقر بزر الماوس الأيمن على محرر التعليمات البرمجية
  • تحوم على مافن والتوسع
  • انقر على Reimport

فكرتي الإصدار هو 12.0.4


شيء آخر للتحقق: تأكد من عدم تكرار التبعيات. في حالتي وجدت أن وحدة نمطية تظهر هذا السلوك تم تكوينها بشكل غير صحيح على النحو التالي: كان لها تبعية على وحدة أخرى ، وكان الاعتماد على جرة التي تنتجها تلك الوحدة الأخرى. هذا يعني لكل رمز المشار إليه في نسختين ، وكان غامضًا.


عملت Invalidate Caches نيابةً عني ولكن بعد تشغيل التطبيق كان له نفس الخطأ.

لذلك حاولت ( Intellij ):

1 - شريط القوائم - Refactor | بناء | تشغيل | أدوات - انقر فوق إنشاء ثم إعادة إنشاء Project

2 - MVN نظيفة

3 - انقر بزر الماوس الأيمن على المشروع> مخضرم> توليد مصادر وتحديث مجلد

أتمنى أن يكون هذا مناسبا لك.

شكر


في بعض الأحيان ، أقوم فقط بفتح بنية المشروع ، ثم انقر فوق المشروع ، ثم اختر إصدار SDK .


في بعض الأحيان ، عندما تقوم بإنشاء حزمة مثل com.mydomain.something لا يتم إنشاء بنية الدليل ويتم تركك مع مجلد واحد يسمى "com.mydomain.something" في هذه الحالة يجب عليك إنشاء بنية الدليل ، مثل

com
|_mydomain
  |_something 

في حالتي ، ظهرت هذه المشكلة بعد أن راجعت إعادة هيكلة كبيرة للملفات في مشروع maven الخاص بي. في وقت السحب كان لي بعض من بلدي غير محدد في التغييرات لا تزال نشطة. لم تكن التغييرات على أي من الملفات التي يتم إعادة هيكلتها بقدر ما أستطيع أن أخبر.

لم يعمل خيار إلغاء صلاحية ذاكرة التخزين المؤقت وإعادة التشغيل. ماذا كان العمل:

  • لعكس التغييرات التي قمت بها قبل عملية إعادة الهيكلة الكبيرة
  • إعادة استيراد جميع وحدات مخضرم

كانت أسماء الوحدات غير المتكررة / المكررة في بنية المشروع تسبب هذه المشكلة بالنسبة لي.

  1. اذهب إلى File -> Project Strucutre -> Modules
  2. في انقر على الوحدات التي لديها تسطير أحمر
  3. حصلت على علامة التبويب "التبعيات"
  4. تأكد من وجود تبعيات حمراء بالفعل في قائمة التبعية. إذا لم يكن كذلك ، فقم بإعادة تسميتها لمطابقة أسماء التبعية الحالية

يمكن أن يحدث هذا عندما لا يتم إيقاف IntelliJ بشكل صحيح وبالتالي لا يمكن حفظ أسماء الوحدات النمطية التي تمت إعادة تسميتها بشكل صحيح.


لقد أتيحت لي هذه المشكلة ولن تختفي. أنا في نهاية المطاف قضت على دليل التكوين IntelliJ في ~ وإعادة إنشائي مشروع IntelliJ من الصفر. (استغرق هذا الأمر حوالي 15 دقيقة فقط في النهاية ، مقارنة بإنفاق ساعة في محاولة حل مشكلات الملفات المخزنة مؤقتًا ، وما إلى ذلك)

تحرير: لاحظ أن تخميني هو أن المشكلة الأولية كانت ناتجة عن شيء مثل: http://javathings.blogspot.com/2009/11/too-many-open-files-in-intellij-idea.html أو مساحة على القرص / مشكلة في الذاكرة تسبب في تعطل java. يبدو أن IntelliJ مجرد الحصول على الفساد.


للحصول على بديل آخر.

حصلت على هذه المشكلة أيضا عندما استخدمت JDK7_07. لقد جربت جميع الإجابات هنا (باستثناء حذف دليل نظام IDEA). لكن ما زلت أواجه المشكلة. إذن ما فعلته هو:

قم بتثبيت أحدث JDK (كان JDK7_45) ، وقم بتعيين JDK الخاص بـ Intellij إلى الجديد ، ويعمل.


هذا حل مشكلتي: انقر بزر الماوس الأيمن على ملف جرة في شجرة ملف داخل AS واختر "إضافة كمكتبة ..."

تحرير: يمكنك القيام به "File" -> "Invalidate Caches ..." ، وتحديد خيار "Invalidate and Restart" لإصلاح هذا.


هيكل مشروعي:

src -> main -> scala -> mypackages

ما الذي نجح:

انقر بزر الماوس الأيمن على المجلد scala ، وانقر على "وضع علامة على الدليل كجذر المصادر".


وقد ذكر هذا أعلاه ، ولكن هذا وحده يصلح هذا بالنسبة لي. أفعل كل ما أقوم به في محطة seaprate ، خارج IntelliJ. لذا تحتاج ذاكرة التخزين المؤقت إلى الحصول على الأذونات المناسبة لتعيين التطبيق IntelliJ لقراءتها.

قم بتشغيله من المجلد الجذر للمشروع.

$ mvn -U idea:idea

mvn idea:idea عملت mvn idea:idea بالنسبة لي. وجدته here . أمضى أكثر من ساعة ، ونأمل أن يساعد شخص ما





intellij-inspections