নির্দিষ্ট ডিরেক্টরি বা উত্পন্ন কোড হিসাবে ফাইলগুলির জন্য জাভা সতর্কতাগুলি কীভাবে দমন করা যায়


110

আমি একটি পার্সার জেনারেটর ব্যবহার করছি যা কিছুটা কুৎসিত কোড তৈরি করে। ফলস্বরূপ আমার Eclipse প্রকল্পে উত্পন্ন উত্স ফাইলগুলি থেকে কয়েক ডজন সতর্কতা রয়েছে has আমি জানি যে আমি @SuppressWarningনির্দিষ্ট উপাদানগুলিতে নির্দিষ্ট সতর্কতাগুলি দমন করতে টীকাটি ব্যবহার করতে পারি , তবে পার্সার জেনারেটর আবার চালানোর সময় আমি হাত দিয়ে যে কোনও টিকা যুক্ত করব তা হারিয়ে যাবে। কোনও নির্দিষ্ট ফাইল বা ডিরেক্টরিতে সতর্কতা দমন করার জন্য Eclipse কনফিগার করার কোনও উপায় আছে কি?


উত্তর:


91

সংস্করণ 3.8 এম 6 দিয়ে শুরু করে, গ্রহপস (সঠিকভাবে বলতে হবে: জেডিটি) এর জন্য বিল্ট-ইন কার্যকারিতা রয়েছে। এটি একটি প্রকল্পের বিল্ড পাথের মাধ্যমে কনফিগারযোগ্য: প্রকল্পের বৈশিষ্ট্য> জাভা বিল্ড পাথ> সংকলক> উত্স

এখানে চিত্র বর্ণনা লিখুন

এখানে ঘোষণা করা হয়েছে: Eclipse 3.8 এবং 4.2 M6 - নতুন এবং লক্ষণীয় , যা নির্বাচিতভাবে উত্স ফোল্ডারগুলি থেকে ত্রুটি / সতর্কতা উপেক্ষা করে । স্ক্রিনশটটি এখান থেকেই। এটি পূর্ববর্তী লিঙ্কযুক্ত বাগ 220928- এ নতুন বৈশিষ্ট্য বিকাশ করা হয়েছে ।


2
"না" -> "হ্যাঁ" কীভাবে স্যুইচ করবেন তা আমি খুঁজে পেলাম না ... এটি "টগল" বোতামটি (এবং সম্পাদনা বা অন্য কিছু নয়) ;-)
বেতলিস্টা

@ বিটলিস্টা: কেবল এটি ডাবল ক্লিক করুন। বা ডানদিকে টগল বোতামে ক্লিক করুন।
altমানo

1
@ হেইমবুর্গার: এই সমাধানটি কেবল উত্স ফোল্ডারে কাজ করে। তবে আমি যদি কেবলমাত্র কোনও ত্রুটিযুক্ত এক্সএমএল ফাইলযুক্ত প্রকল্পে একটি ফোল্ডার রেখেছি? আমি তাদের সম্পর্কে সতর্কতাগুলি দেখতে ঘৃণা করি :(
12'15

@ অলতুমানো উপরের বৈশিষ্ট্য / বিকল্পটি জেডিটি প্লাগইন থেকে এসেছে, অর্থাত্ গ্রহণের জন্য জাভা সমর্থন। (মনে রাখবেন যে Eclipse এর বেশিরভাগ কিছুই একটি প্লাগইন, এমনকি জাভা সমর্থনও বেকড হয় না)) সুতরাং আপনাকে এক্সএমএল যাচাইয়ের জন্য আপনি যে প্লাগইন ব্যবহার করেছেন সেটি বিকাশকারীকে আবার পরীক্ষা করতে হবে। আইআইআরসি, এখানে অনেকগুলি রয়েছে, সুতরাং আপনি সম্ভবত যেটি ব্যবহার করছেন তার জন্য আপনার সম্ভবত একটি নতুন প্রশ্ন খোলা উচিত।
হেনরিক হিমবুর্গের 21

+1 টি। যাইহোক, আপনি কোন ওএস ব্যবহার করেছেন? হরফ রেন্ডারিং বেশ আশ্চর্য।
নাম

20

এর জন্য একটি টিকিট রয়েছে, বাগ 220928 , যেটি গ্রহনটি ৩.৮ এর জন্য শেষ হয়েছে। দয়া করে দেখুন এই উত্তরটি বিস্তারিত জানার জন্য।

আপনি যদি Eclipse 3.7 বা এর চেয়ে কমের সাথে আটকে থাকেন: ব্যবহারকারী "মার্ক" সেই টিকিটে মন্তব্য করছেন 35 টি মন্তব্যে 'ওয়ার্নিংক্লেনার' নামে একটি প্লাগইন তৈরি করেছেন (বা তার কমপক্ষে লিঙ্ক করেছেন) । এই বৈশিষ্ট্যটিগ্রহণের সাথে একীভূত হওয়ার জন্য অপেক্ষা করার সময় আমি প্রচুর সাফল্যের সাথে এটি ব্যবহার করছি।

এটি সত্যিই বেশ সহজ:

  1. প্লাগইন ইনস্টল করুন।
  2. প্রকল্পটিতে ডান-ক্লিক করুন এবং "উত্পন্ন কোডের প্রকৃতি যুক্ত করুন / সরান" নির্বাচন করুন।
  3. প্রকল্পের সেটিংস খুলুন (ডান ক্লিক করুন এবং "বৈশিষ্ট্যগুলি নির্বাচন করুন")।
  4. 'সতর্কতা ক্লিনার' ট্যাবটি খুলুন।
  5. আপনি যে উত্স ফোল্ডারগুলি থেকে সতর্কতাগুলি উপেক্ষা করতে চান তা নির্বাচন করুন।

সতর্কতা ক্লিনার স্ক্রিনশট


দুর্ভাগ্যক্রমে প্লাগইনটির লিঙ্কটি এখন একটি 403 দেয়
কুট্টি

1
এটি প্রদর্শিত হয় যে একটি বাস্তব বাস্তবায়নের দিকে অগ্রগতি এখনও চলছে (বাগের বিষয়ে মন্তব্যগুলি পড়া)। বৈশিষ্ট্যটি প্রয়োগ করা থাকলে নির্দিষ্ট সংস্করণ নম্বরগুলি ব্যবহার করার জন্য প্রশ্ন / উত্তর আপডেট করার বিষয়টি নিশ্চিত করুন। অন্যথায়, Eclipse এর ভবিষ্যতের ব্যবহারকারীগণ বিভ্রান্ত হতে পারে।
ক্রিস ব্রাউন

1
কার্যকারিতাটির অস্তিত্ব এখনও রয়েছে বলে প্রশ্ন / উত্তরটি বর্তমানে উন্নত হতে পারে বলে আমি মনে করি না, তবে কার্যকারিতাটি যদি কখনও গ্রহের সাথে যুক্ত হয় তবে কারও উচিত এটি সম্পাদনা করা উচিত। অগত্যা আমাকে নয়, তবে আমি যদি সঠিক সময়ে সঠিক জায়গায় থাকি তবে অবশ্যই আমি তা করব।
ক্রিস ব্রাউন

5
এই প্লাগইনটিতে কারও কি বর্তমান লিঙ্ক আছে? আমি এটি ব্যবহার করতে সক্ষম হতে চাই!
টম ট্রেসানস্কি

1
মনোযোগ দিন: গ্রহের জন্য এখন এর একটি অন্তর্নির্মিত সমাধান রয়েছে, যেমন আপনি হিম্বুবার্গারের অন্যান্য উত্তরটিতে দেখতে পারেন। যাইহোক, হেইমবুর্গার, আপনি এই উত্তরটিকে 'অফিসিয়াল' করার জন্য আপডেট উত্তর দিয়ে রিফ্যাক্টর করা উচিত।
রবার্তো

18

আমি ম্যাভেন রেজিপ্সপ রিপ্লেস প্লাগইন ব্যবহার করে এটি সমাধান করেছি - এটি কারণটি সমাধান করে না, তবে ব্যথা নিরাময় করে:

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>maven-replacer-plugin</artifactId>
  <version>1.3.2</version>
  <executions>
<execution>
  <phase>prepare-package</phase>
  <goals>
    <goal>replace</goal>
  </goals>
</execution>
  </executions>
  <configuration>
<includes>
  <include>target/generated-sources/antlr/**/*.java</include>
</includes>

<regex>true</regex>
<regexFlags>
  <regexFlag>MULTILINE</regexFlag>
</regexFlags>

<replacements>
  <replacement>
    <token>^public class</token>
    <value>@SuppressWarnings("all") public class</value>
  </replacement>
</replacements>
  </configuration>
</plugin>

মনে রাখবেন যে আমি ** স্বরলিপিটি কাজ করার জন্য পরিচালনা করতে পারি নি, তাই আপনাকে সঠিকভাবে পথ নির্দিষ্ট করতে হতে পারে।

কীভাবে ডুপ্লিকেট @ সাপ্রেস ওয়ার্নিংস তৈরি করবেন না তার উন্নতির জন্য নীচের মন্তব্য দেখুন


মাভেনের উল্লেখ না থাকায় এটি অবশ্যই প্রশ্নের উত্তর দেয় না। তবে এটি আমার ক্ষেত্রে দুর্দান্ত কাজ করে, আমি যেমন মাভেন ব্যবহার করে ;-)
কুট্টি

আপনি যদি ম্যাভেনের পরিবর্তে পিঁপড়া ব্যবহার করেন তবে একই জিনিসটি করা যেতে পারে, আমার উত্তর দেখুন।
উয়র্ন

1
দেখে মনে হচ্ছে এএনটিএলআর ৩.৪ নিজে থেকে টীকা যুক্ত করে তবে আমি সমাধানটির সাধারণতা পছন্দ করি (কেবল এএনটিএলআর কোড উত্পন্ন করে না)। এখনও পর্যন্ত সব উত্পন্ন সূত্র এটি প্রয়োগ করার জন্য, আমি এই প্যাটার্ন ব্যবহার করুন: ^(@SuppressWarnings\(.*?\)\s+)?public class। প্যাটার্নে টীকাটি অন্তর্ভুক্ত করে এটি ইতিমধ্যে সেখানে থাকলে এটি সদৃশ হয় না।
সিলি ফ্রিক

এই (বেশী বা কম) আমার জন্য কাজ - আমি যোগ করার জন্য ছিল ${basedir}/আগে target<include>ট্যাগ। কিন্ডা জাঙ্কি মনে হচ্ছে, তবে যেহেতু এটি কেবল উত্পন্ন ফাইলগুলিতে কাজ করে, আমি এটি গ্রহণ করব!
রব

7

আমি মনে করি সতর্কতা প্রদর্শনের জন্য প্রকল্প সুনির্দিষ্ট সেটিংস সক্ষম করা আপনার পক্ষে সবচেয়ে ভাল।

উইন্ডো -> পছন্দসমূহ -> জাভা -> সংকলক -> ত্রুটি / সতর্কতা

ফর্মের শীর্ষে প্রকল্প নির্দিষ্ট সেটিংস কনফিগার করার জন্য একটি লিঙ্ক রয়েছে।


4

ব্যবহারকারী @ জর্ন এটি করার জন্য পিঁপড়ে কোডে ইঙ্গিত করেছিলেন। আমার যা আছে তা এখানে

<echo>Adding @SuppressWarnings("all") to ANTLR generated parser/lexer *.java</echo>
<echo> in ${project.build.directory}/generated-sources/antlr/</echo>
<replace dir="${project.build.directory}/generated-sources/antlr/" 
         summary="true" 
         includes="**/*.java" 
         token="public class" 
         value='@SuppressWarnings("all") public class' />

নোট করুন যে পিঁপড়ার <রিপ্লেস> টেক্সট রিপ্লেসমেন্ট করে, নিয়মিত এক্সপ্রেশন রিপ্লেসমেন্ট করে না, সুতরাং ম্যাভেন রেজ এক্সপ্লেস প্রতিস্থাপন প্লাগইন যেমন করায় তেমন টেক্সনে match মেটা-চরিত্রটি ব্যবহার করতে পারে না।

আমি আমার মাভেন পামে ম্যাভেন-অ্যান্ট্রুন-প্লাগইন থেকে অ্যান্টলারের চালানো একই সময়ে করছি, কারণ এএনটিএলআর মাভেন প্লাগইন কোবার্টুরা ম্যাভেন প্লাগইনের সাথে ভাল খেলেনি।

(আমি বুঝতে পারি যে এটি মূল প্রশ্নের উত্তর নয়, তবে আমি কোনও মন্তব্যে / অন্য উত্তরের জবাবে, কেবল একটি উত্তরে এন্টি কোডটি ফর্ম্যাট করতে পারি না))


1

আমি মনে করি না সূর্যগ্রহণ সূচিকভাবে ডিরেক্টরি স্তরে এটি করার একটি উপায় সরবরাহ করে (তবে আমি নিশ্চিত নই)।

উত্পন্ন ফাইলগুলি একটি পৃথক জাভা প্রকল্পে যেতে এবং সেই নির্দিষ্ট প্রকল্পের জন্য সতর্কতাগুলি নিয়ন্ত্রণ করতে পারে।

আমি সাধারণত যেকোনভাবে একটি পৃথক প্রকল্পে স্বয়ংক্রিয়ভাবে উত্পন্ন কোড স্থাপন করতে পছন্দ করি।


1

আপনি কেবলমাত্র প্রকল্প পর্যায়ে সতর্কতাগুলি দমন করতে পারেন। তবে ফাইল বা প্যাকেজগুলির সতর্কতা দমন করতে আপনি নিজের সমস্যা ট্যাবটি কনফিগার করতে পারেন। কনটেন্ট কনফিগার করুন মেনুতে যান এবং "ওপিং ওয়ার্কিং সেট:" স্কোপ নিয়ে কাজ করুন।


কনফিগার কনটেন্টগুলি মেনুটি আমার কাছে কোনও অর্থ দেয় না।
ক্রিস কনওয়ে

আপনি এটি খুঁজে পাচ্ছেন না বা এটি কোথায় নেভিগেট করবেন তা আপনি বুঝতে পারবেন না? আমি Eclipse 3.4.1 ব্যবহার করছি (আমার মনে হয় এটি পাইডেভের সাথে একটি গ্যানিমেড ইনস্টল যুক্ত হয়েছে)। সমস্যাগুলির ট্যাবটির উপরের ডানদিকে কোণে অবস্থিত যখন আপনি tab ট্যাবটির মেনুটি নীচে রেখে ছোট তীর আইকনে ক্লিক করেন।
গ্রেগ

আমি এটি খুঁজে পেতে পারেন। আমি বুঝতে পারছি না যে ডায়ালগটিতে সেটিংস পরিবর্তন কী সম্পন্ন করবে।
ক্রিস কনওয়ে

আমি দেখতে পাচ্ছি এটি কীভাবে কাজ করতে পারে তবে তারপরে আপনাকে কাজের সেটগুলি ব্যবহার করতে হবে যা সাধারণ সমাধান নয়। এটি সমস্যাটিকে আরও বাড়িয়ে দেয় কারণ এখন সঠিক সতর্কতাগুলি দেখার জন্য আপনাকে নিজের কার্য সেটটি আপডেট করতে হবে।
পিটার ডলবার্গ

1

আমি এটি কয়েকটা এএনটিএলআর ব্যাকরণের সাথে করছি, যা পিঁপড়া ব্যবহার করে একটি জাভা পার্সার তৈরি করে। পিপীলিকা বিল্ড স্ক্রিপ্টটি @SuppressWarnings("all")একটি জাভা ফাইলগুলিতে এবং @Overrideঅন্যটিতে কয়েকটি পদ্ধতিতে যুক্ত করে। আপনি আগ্রহী হলে আমি ঠিক এটি কীভাবে সম্পন্ন হয়েছে তা সন্ধান করতে পারি can


একটি আকর্ষণীয় ধারণা। @ সাপ্রেস ওয়ার্নিংগুলি ক্লাস ঘোষণার ঠিক আগে আসার দরকার নেই (যেমন, এটি ফাইলের প্রথম লাইনে এটি সন্নিবেশ করার মতো সহজ নয়)?
ক্রিস কনওয়ে

এটি সেখানে স্থাপন করা দরকার, তবে এটি কার্যক্ষম। সঠিক ফাংশনটি শক্ত করার জন্য আমার পিপীলিকার ডকুমেন্টেশনের গভীরে ডুব দেওয়া দরকার ছিল, তবে পিঁপড়ার সাথে আমার খুব বেশি অভিজ্ঞতা নেই।
উয়র্ন

Antlr.org/wiki/pages/viewpage.action?pageId=1865 দেখুন যা কীভাবে এএনটিএলআর জাভা কোডজেন টেম্পলেটটি সংশোধন করতে হয় তা বর্ণনা করে। তবে, গ্রহণের জন্য এএনটিএলআর প্লাগইন ব্যবহার করার সময় সেই কাজটি কীভাবে করা যায় তা পরিষ্কার নয়। আমি অনুমান করি যে একটি প্লাগইন জার হ্যাক করার সাথে বা উপরে উল্লিখিত অন্য একটি ওয়ার্কআরউন্ড ব্যবহার করে রেখে গেছে।
ডিজেবি

1

এই ছোট অজগর স্ক্রিপ্টটি এম 2 ই-উত্পন্ন .classpathফাইলগুলিকে "প্যাচ" করে এবং শুরু হওয়া সমস্ত উত্স ফোল্ডারে প্রয়োজনীয় এক্সএমএল ট্যাগ যুক্ত করে target/generated-sources। আপনি এটি কেবল আপনার প্রকল্পের মূল ফোল্ডার থেকে চালাতে পারেন। স্পষ্টতই যখন এম 2 ই থেকে এক্সিলিপ প্রকল্পের তথ্য পুনঃনির্মাণ করা হবে তখন আপনাকে এটিকে পুনরায় চালানো দরকার। এবং সব আপনার নিজের ঝুঁকিতে, স্পষ্টত ;-)

#!/usr/bin/env python
from xml.dom.minidom import parse
import glob
import os

print('Reading .classpath files...')
for root, dirs, files in os.walk('.'):
    for name in files:
        if (name == '.classpath'):
            classpathFile = os.path.join(root, name)
            print('Patching file:' + classpathFile)
            classpathDOM = parse(classpathFile)
            classPathEntries = classpathDOM.getElementsByTagName('classpathentry')
            for classPathEntry in classPathEntries:
                if classPathEntry.attributes["path"].value.startswith('target/generated-sources'):
                    # ensure that the <attributes> tag exists
                    attributesNode = None;
                    for attributes in classPathEntry.childNodes:
                            if (attributes.nodeName == 'attributes'):
                                attributesNode = attributes

                    if (attributesNode == None):
                        attributesNode = classpathDOM.createElement('attributes')
                        classPathEntry.appendChild(attributesNode)

                    # search if the 'ignore_optional_problems' entry exists
                    hasBeenSet = 0
                    for node in attributesNode.childNodes:
                        if (node.nodeName == 'attribute' and node.getAttribute('name') == 'ignore_optional_problems'):
                            # it exists, make sure its value is true
                            node.setAttribute('value','true')
                            #print(node.getAttribute('name'))
                            hasBeenSet = 1

                    if (not(hasBeenSet)):
                        # it does not exist, add it
                        x = classpathDOM.createElement("attribute")
                        x.setAttribute('name','ignore_optional_problems')
                        x.setAttribute('value','true')
                        attributesNode.appendChild(x)

            try:
                f = open(classpathFile, "w") 
                classpathDOM.writexml(f)
                print('Writing file:' + classpathFile)
            finally:
                f.close()
print('Done.')

0

এএনটিএলআর 2 এর ক্ষেত্রে, @SuppressWarningsব্যাকরণ ফাইলে শ্রেণীর ঘোষণার আগে অ্যাপেনিডং দ্বারা উত্পন্ন কোডে সতর্কতাগুলি দমন করা সম্ভব , যেমন

{@SuppressWarnings("all")} class MyBaseParser extends Parser;

0

বিল্ড পাথ থেকে নির্দিষ্ট ডিরেক্টরিগুলি বাদ দিয়ে এটি করা যেতে পারে (নীচের উদাহরণটি Eclipse 3.5 ব্যবহার করে দেওয়া হয়েছে)

[1] জাভা বিল্ড পাথটি আনুন

  • প্রকল্প প্যাকেজ এক্সপ্লোরার ক্লিক করুন
  • রাইট ক্লিক, বৈশিষ্ট্য
  • জাভা বিল্ড পাথ নির্বাচন করুন

[2] বাদ দেওয়ার জন্য ডিরেক্টরি যুক্ত করুন

  • উত্স ট্যাবে প্রকল্প উত্স ফোল্ডারগুলির বিশদ থাকতে হবে
  • উত্স ফোল্ডারটি প্রসারিত করুন এবং 'বাদ দেওয়া:' সম্পত্তিটি সনাক্ত করুন
  • 'বাদ দেওয়া:' নির্বাচন করুন এবং সম্পাদনা ক্লিক করুন
  • একাধিক অ্যাড / অ্যাড যুক্ত বিকল্পগুলি ব্যবহার করে বর্জনীয় প্যাটার্নগুলিতে ফোল্ডার যুক্ত করুন
  • সমাপ্তি ক্লিক করুন, তারপরে পুনর্নির্মাণের জন্য ঠিক আছে।

0

আমি সতর্কতা-ক্লিনার প্লাগইন প্রকাশ করার পরে বেশ কিছুক্ষণ হয়ে গেছে, এবং এখন আমি যে গ্রহনটি ৩.৮ ব্যবহার করছি, আমার আর এটির দরকার নেই। যাইহোক, যাদের এখনও এই প্লাগইনটির প্রয়োজন তাদের জন্য, আমি এটি বিন্ট্রে আপডেট সাইটের সাথে গিথুবে প্রকাশ করেছি। আপনি যদি এখনও Eclipse 3.7 বা তার আগে ব্যবহার করেন তবে এটি কার্যকর হতে পারে। পরীক্ষা করে দেখুন এই সাইটের ইনস্টলেশন বিস্তারিত জানার জন্য।


0

যদি Eclipse প্রকল্পটি গ্রেড প্লাগইনের eclipse কমান্ড ব্যবহার করে গ্রেড থেকে উত্পন্ন Selectively ignore errors/warnings from source foldersহয় তবে আপনার build.gradleফাইলের শীর্ষ স্তরে এটি যুক্ত করে বিকল্পটি সেট করা যেতে পারে :

eclipse.classpath.file {
    whenMerged { classpath ->
        classpath.entries.each { entry -> 
            if (entry.path.contains('build/generated/parser')) {
                entry.entryAttributes['ignore_optional_problems'] = true
            }
        }
    }
}

এটি ধরে নেওয়া হয় যে উত্পন্ন উত্সগুলি build/generated/parserফোল্ডারে রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.