Playframework: تأكد من أن التوجيه العكسي يعمل مع فكرة تشغيل الفانيليا من مشروع Java في IntelliJ

تم إنشاؤها على ٨ أبريل ٢٠١٣  ·  49تعليقات  ·  مصدر: playframework/playframework

في مشروع Java ، يبدو أن IntelliJ يعتبر المسارات العكسية أخطاءً في بناء الجملة في.

التعليق الأكثر فائدة

لقد ألغيت استبعاد المجلد target في جذر مشروعي. والآن تعمل بشكل جيد!

ال 49 كومينتر

ما هي المشكلة بالضبط؟ يمكنني فتح مشروع play-java عادي في فكرة والوصول إلى التوجيه العكسي دون مشكلة. لكني أرى بعض المشاكل الأخرى:

  • يُظهر route.java خطأ
  • حسنًا (index.render (...)) يظهر أيضًا خطأ. أنا مندهش من هذا.

لقد لاحظت هذا أيضًا (الطلب الأصلي الذي قدمته كان لشخص آخر).

يبدو أن IntelliJ 12.1 غير قادر على استنتاج نوع الإرجاع لطرق Scala التي تم استدعاؤها من كود Java إذا كانت تُرجع نوعًا عامًا.

سبب شكوى وحدة التحكم لأن المشروع لم يتم تجميعه وبالتالي لم يتم إنشاء ملفات مسار عكسي. لذلك إذا قمت بتجميع المشروع قبل الفتح في IDE ، فيجب أن يختفي هذا الخطأ. المشكلة الثانية هي أنك إذا حاولت بناء المشروع فإنه يفشل لأننا لا نضيف Scala Facet لمشاريع Java. أعتقد أن الإصلاح المناسب لذلك يجب أن يكون تشغيل مهمة الترجمة قبل إنشاء ملفات مشروع IDEA تلقائيًا (نقوم بذلك من أجل الكسوف) وإضافة واجهة Scala لكل من مشاريع Scala و Java.

تكمن المشكلة في عدم وجود آلية لتعيين المهام المسبقة لـ SbtIdeaPlugin ولا يمكنني العثور على طريقة للتوصيل بأمر "الفكرة". لذلك في الوقت الحالي يمكننا إضافة واجهة Scala والإشارة إليها في المستندات لتشغيل الترجمة لإصلاح أي مشاكل تجميع إضافية. أفكار؟

يبدو أنه أكثر من هذا. لقد قمت بتمكين واجهة scala (على ما أظن) ، وما زلت أحصل على خطأ التمييز. يبدو أنه يعمل في مشروع Scala ، لكن الملف الذي تم إنشاؤه route.java به أخطاء. أعتقد أن سبب هذا في الواقع هو مشكلة IntelliJ.

تم فتح المشكلة مع IntelliJ: http://youtrack.jetbrains.com/issue/IDEA-106570

يبدو أن هذا يؤثر فقط على جهازي على routes.javascript.* و routes.ref.* . يمكن رؤيته بسهولة عند فتح الملف الذي تم إنشاؤه target/scala-2.10/src_managed/main/controllers/routes.java في IDEA:

screen38

  • الجزء الأول منه جيد ، ويمكن لـ IDEA التنقل بسهولة إلى تعريف controllers.ReverseApplication ، على سبيل المثال ، الموجود في ملف آخر تم إنشاؤه target/scala-2.10/src_managed/main/routes_reverseRouting.scala
  • يحتوي الجزءان الثاني والثالث (جافا سكريبت والمرجع) على جميع أسماء الفئات مطلية باللون الأحمر كأخطاء في بناء الجملة: لا يمكن لـ IDEA العثور على فئات مثل controllers.javascript.ReverseApplication ، بينما هم في الواقع في نفس الملف routes_reverseRouting.scala

لذا ، فإن فرضيتي هي: قد تكون المشكلة ناتجة عن حقيقة أن العديد من الحزم والفئات محددة في ملف Scala الفردي routes_reverseRouting.scala ؟ قد يكون هذا بالفعل قيدًا معروفًا لمكوِّن Scala-plugin الخاص بـ IntelliJ: إذا فتحنا هذا routes_reverseRouting.scala وانتقلنا إلى أي سطر package xxx فيه ، فسنراه مميزًا بتحذير صريح

لست متأكدًا من كيفية حل هذه المشكلة ، ولكن هل يمكننا مزامنة بنية المجلد مع بنية الحزمة هنا؟ الملف routes.java موجود بالفعل في المجلد controller ، ويتم التعامل معه بشكل جيد بواسطة IDEA ، لذلك ربما يمكن تقسيم routes_reverseRouting.scala إلى ثلاثة ملفات وضعت تحت هذا المجلد أيضًا؟

هاها ، حل بديل أبسط: لقد أنشأت دلائل فارغة javascript و ref ضمن الدليل controllers على الصورة ، وحصلت عليها IDEA. اختفت الأخطاء النحوية في كل من routes.java ووحدة التحكم الخاصة بي ، ويعمل الإكمال. لذا فإن البرنامج المساعد scala _can_ يتعامل مع بنية الحزمة التي لا تشبه بنية الدليل ، ولكنها تتعثر في أسماء الحزم غير المعروفة لها.

أنا أدير مشروع Scala ولدي نفس المشكلة بالفعل. يبدو أن وحدات التحكم الخاصة بي ليس لديها أي طرق محددة (باستثناء تلك المشتقة من java.lang.Object).

لا يمكنني إعادة إظهار هذه المشكلة مع IntelliJ 12.1.4 و Scala plugin 0.16.293. يرجى ملاحظة أن لدي أيضًا المكون الإضافي Play 2.0 Support من JetBrains: 0.16.294

بالضبط نفس المشكلة. لا يستطيع IDEA 12.1.5 التعرف على طرق التحكم من التوجيه العكسي. حاولت إعادة ترجمة وإنشاء مجلدات مرجعية وجافا سكريبت.

لا تزال هذه مشكلة حتى بالنسبة لمشاريع scala مع أحدث مكون إضافي intellij-scala وتشغيل 2.2.1-RC1

OlegYch بما في ذلك

في الخميس ، 5 كانون الأول (ديسمبر) 2013 ، الساعة 2:52:23 صباحًا ، كتب كريستوفر هانت:

OlegYch https://github.com/OlegYch بما في ذلك IntelliJ 13؟

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/playframework/playframework/issues/969#issuecomment -29858570.

نعم
مع sbt-idea 1.6.0-SNAPSHOT غير لحل المسارات العكسية
مع فكرة اللعب يتم حل المسارات العادية فقط http://prntscr.com/28s1g5
هذا هو استخدام فكرة 133.193 (13 نهائي) و scala / play plugins v 0.26.319

شكرا عليه

تظل قضية IntelliJ مفتوحة لذا أعتقد أنه يمكننا إبقاء هذا مغلقًا في الوقت الحالي.

لماذا لا تقوم فقط بإنشاء مجلدات ref و javascript لحلها؟

بالتأكيد ، أضف هذا إلى جهازك:

sourceGenerators in Compile <+= sourceManaged in Compile map { dir: File =>
  val dirs = Seq(dir / "ref", dir / "javascript")
  dirs.foreach(_.mkdirs)
  dirs
}

أعتقد أن ذلك يجب أن يكون:

val dirs = Seq(dir / "main" / "controllers" / "ref", dir / "main" / "controllers" / "javascript")

حق؟

على أي حال ، التجميع ينتهي بالخطأ:

[error] source file '.../target/scala-2.10/src_managed/main/controllers/javascript' could not be found

نعم ، هذا لا يعمل.

يجب أن يعمل هذا

    sourceGenerators in Compile += task {
      val dir: File = (sourceManaged in Compile).value / "controllers"
      val dirs = Seq(dir / "ref", dir / "javascript")
      dirs.foreach(_.mkdirs)
      Seq[File]()
    }

لماذا هذا صعب الإفراج عنه؟
هل يجب على كل مستخدم حل مشكلات مثل هذه و # 1784؟

إصلاح أسهل - قم بإلغاء تحديد "وحدات التحكم" و "العروض" كجذور مصدر في IntelliJ ، وحدد "main" كجذر مصدر. يعمل على إصلاح بناء الجملة تمييز / إكمال / إلخ.

+10 (1 لكل وحدة يجب تغييرها يدويًا)

يرجى ملاحظة أن http://youtrack.jetbrains.com/issue/SCL-5635 يظل مفتوحًا. إذا كنت تشعر أنه يمكننا حل هذا الأمر ، فيرجى فتح العلاقات العامة المرتبطة. شكرا.

لقد وجدت الحل لهذه المشكلة عن طريق تغيير مسارات المصدر في إعدادات الوحدة النمطية لمشروع IDEA كما هو موضح هنا:
http://www.jensjaeger.com/2013/09/play-framework-2-2-in-intellij-errors-in-controllers-everywhere/

هذه مشكلة مع فكرة sbt. يتمثل الحل البديل في إلغاء تحديد دليل وحدات التحكم (مثل target / scala-2.11 / src_managed / main / controllers) كجذر مصدر ، ووضع علامة على المجلد الرئيسي (مثل target / scala-2.11 / src_managed / main) كجذر مصدر. ثم سيجد IntelliJ كل شيء بشكل صحيح. يجب إصلاح هذا حقًا ، إما عن طريق تغيير المكان الذي يضع فيه Play ملفات المسارات المترجمة (نظرًا لأن sbt-idea تتوقع أن يتم وضع كل شيء في مجلدات فرعية داخل compile: MananSources) ، أو إرسال هذا على أنه خطأ في sbt-idea.

الخطأ في فكرة sbt. يجب أن يضع Play ملفات المسارات المترجمة في src_managed/main ، لأن أحد الملفات التي تم إنشاؤها هو ملف Java ، ويتطلب برنامج التحويل البرمجي Java أن تتطابق بنية المجلد مع بنية الحزمة ، ويستخدم SBT src_managed/main كـ المجلد الجذر لتجميع Java. لذا يجب أن تكون فئة controllers.routes في src_managed/main/controllers/routes.java ، وأي شيء آخر و javac ينتج خطأ في التجميع.

لاحظ أنه في الإصدار الرئيسي (Play 2.4) ، نستخدم الآن دليلًا مختلفًا تمامًا خارج src_managed ، والذي أعتقد أنه سيؤدي إلى اختفاء هذه المشكلة.

لاحظ أن هذا ليس مشكلة في IntelliJ 13 ودعم SBT المحدث. يتم التقاط دعم التوجيه العكسي تلقائيًا.

يعمل حل NIA حتى في IntelliJ IDEA 14.

هذه المشكلة محيرة للغاية وأنا مندهش من أنه لم يتم إصلاحها بعد. نعم ، يعمل الحل البديل لـ NIA ، لكن الأمر استغرق مني بعض الوقت حتى اكتشفت هذه المشكلة. لذلك ، من أجل أي مطور Play Java في المستقبل (والفرصة كبيرة أنهم يستخدمون IntelliJ Idea) ، آمل حقًا أن تختفي مع Play 2.4.

هذا ما زال مستمراً في انتليج 14.1 الأخير. الحل البديل لـ NIA لا يزال جيدًا

أضع الإجابةOlegYch الصورة في بلدي Build.scala وتحميل المشروع.
لا يزال My Intellij لا يتضمن "target / scala-2.11 / src_managed / main" كمجلد مصدر.
هنا هو Build.scala الخاص بي:
screenshot from 2015-04-02 15 23 10

لذلك لا بد لي من إضافة مجلد المصدر يدويًا في كل مرة بعد إعادة تحميل المشروع: (

FWIW ، لا يعمل أي من هذه الحلول مع Play 2.3.8 و IJ 14.1.x :(

لست متأكدًا مما إذا كانت هذه هي نفس المشكلة ، ولكن عند محاولة تنفيذ return redirect(routes.Application.index()); ، فإن المسارات ليست متغيرًا معروفًا يمكن استخدامه.

أحاول اتباع مثال إطار التشغيل الأساسي (فيديو YouTube على الصفحة الأولى من playframework.com) باستخدام IntelliJ 14.0.4 وأحدث إصدار من Play (2.3.8؟).

ومع ذلك ، فإن تطبيقي يجمع ويعمل كما هو متوقع !! التماثيل الحمراء مزعجة. الرجاء تصحيح ديس الرجال :)

cannot resolve symbol routes

+1 @ PeterRangelov

كان يجب أن أقدم لقطة شاشة ، لدي نفس المشكلة بالضبط. كل شيء يتم تجميعه ويعمل بشكل جيد ، فقط أمر مزعج لإلقاء نظرة عليه في IntelliJ.

لمعلوماتك ، لا تزال هذه مشكلة في اللعب 2.4. يتم تجميع الفصول بشكل جيد ولكن من المزعج النظر إليها والحل المذكور سابقًا لإنشاء الدلائل المزيفة لا يعمل.

screen shot 2015-06-20 at 8 29 31 pm

نعم ، لدي نفس المشكلة باستخدام فكرة إنتليج 14

واجهت نفس المشكلة مع Intellij Idea 14.1.4 وإطار اللعب 2.4.2 لكنني تمكنت من حل المشكلة بمساعدة الرابط ghost المضافة لكنها كانت قديمة لذا اضطررت إلى إجراء تغييرات صغيرة ، هذا ما فعلته .
انقر بزر الماوس الأيمن على دليل "target" من متصفح المشروع في intellij واختر "تعليم الدليل كـ" ثم "إلغاء الاستبعاد". بعد ذلك ، انقر بزر الماوس الأيمن على مجلد "scala-2.11 / route / main" واختر "mark directory as sources root". لقد استبعدت أيضًا "دقة ذاكرة التخزين المؤقت" و "التدفقات".

hossamahamid لا يمكنني استبعاد دليل "./target" ولكن يمكنني استبعاد "project-> target" ، ومع ذلك ، فإن الملف "scala-2.11 /ways / main" موجود في الدليل "./target". عندما تشير إلى "target" هل تشير إلى دليل "target" الموجود في الدليل الجذر للمشروع؟
إذا استطعت ، ألق نظرة على صوري وأخبرني ما إذا كان هذا هو حالتك (تظهر القائمة عندما قمت بالنقر بزر الماوس الأيمن فوق العنصر المميز باللون الأزرق في متصفح المشروع):

screen shot 2015-07-15 at 11 06 28

screen shot 2015-07-15 at 11 06 36

screen shot 2015-07-15 at 11 07 46

ربما لا يمكنني تنفيذ العمليات المتوقعة لأنني أضفت مشروعًا ذا صلة في build.sbt:

name := """WHTTP-front"""

version := "1.0-SNAPSHOT"

lazy val wcommon = RootProject(file("../WCommon"))

val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(wcommon)

scalaVersion := "2.11.6"

//val whttp_front = Project(id = "root", base = file("."))

libraryDependencies ++= Seq(
  jdbc,
  cache,
  ws,
  specs2 % Test
)

libraryDependencies +=
  "com.typesafe.akka" %% "akka-remote" % "2.4-SNAPSHOT"

resolvers += "Akka Snapshot Repository" at "http://repo.akka.io/snapshots/"

resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"

// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator


fork in run := true


لقد ألغيت استبعاد المجلد target في جذر مشروعي. والآن تعمل بشكل جيد!

vicaba نعم أعني الدليل الهدف في الجذر. هذا غريب ولكن حاول استبعاد الدليل الهدف من نافذة إعدادات الوحدة. يمكنك فتحه عن طريق النقر بزر الماوس الأيمن على دليل المشروع واختيار "فتح إعدادات الوحدة النمطية" ، أو عن طريق تحديد "هيكل المشروع" من قائمة "ملف" ثم "وحدات".

hossamahamid لقد
لكن بينما كنت أبحث عن الحل خرجت باكتشافين:
الأول هو أنه إذا قمت بتغيير التطبيق الافتراضي الخاص بي _class_ controller إلى _object_ ، فإنني أحصل على تلميحات التعليمات البرمجية الصحيحة عند كتابة المسارات ، لكن التطبيق لا يترجم: S. في الإصدارات السابقة من Play ، كانت وحدات التحكم حيث _objects_.
الشيء المثير للاهتمام الآخر الذي اكتشفته هو أنه في الوقت الحالي ، يمكنني تعطيل عمليات فحص مسار Play:
screen shot 2015-07-15 at 14 26 04

قم بتغيير تكوين عمليات التفتيش من خلال النقر على الرجل ذو القبعة في أسفل اليمين.

سأجربه مرة أخرى في غضون أيام قليلة بعد إجراء تثبيت نظيف لنظام التشغيل.

شكرا لكم جميعا على الدعم على أي حال.

vicaba لدي نفس المشكلة ، أعتقد أننا بحاجة إلى انتظار Jetbrans لإصلاح هذا (في الإصدار النهائي) لأنني لا أرى كيف يمكن أن يعمل بدون شكل من أشكال "الاختراق" من بائع الأداة. نظرًا لأن وحدات التحكم هي الآن فئات مسار البيان.سيكون .method دائمًا غير صالح لأنه في Scala لا يمكنك استدعاء طريقة في الفصل.

thobson Yep ، هذا فقط ما كنت أفكر فيه ... سيتعين علينا الانتظار.

vicaba لقد عثرت للتو على إصدار EAP من المكون الإضافي والذي يبدو أنه يعمل في معظم الحالات. ألق نظرة هنا وقم بتنزيل الإصدار 1.5.2.3.EAP من البرنامج المساعد. سوف تحتاج إلى إلغاء تثبيت البرنامج المساعد Scala الموجود ثم نسخ هذا الإصدار الجديد في دليل الملحقات ، مع إعطائه اسم المجلد "Scala". بالطبع إنه برنامج EAP لذا فهو ليس مثاليًا ولكن يبدو أنه يعمل جيدًا بالنسبة لي (حتى الآن!)

thobson شكرًا ، سأحاول ذلك بأسرع ما يمكن :)

البرنامج المساعد Scala 1.5.2.3.EAP لم يعمل معي. ذهبت مع تعطيل تعطيل فحص إجراء توجيه اللعب بدلاً من ذلك.

لا تزال هذه المشكلة موجودة في intellij 15-eap ومع ملحق scala في الإصدار 1.8.

أتساءل لماذا لا تزال هذه المشكلة مغلقة على الرغم من أنها لا تزال مشكلة كبيرة.

javascript-red

تم إغلاقه لأنه يمثل مشكلة في طريقة استيراد IntelliJ للمشروعات ، وليس مع Play ، لذلك لا تنتمي المشكلة إلى متعقب مشكلات Play.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات