.Jar চালানোর চেষ্টা করার সময় "অবৈধ স্বাক্ষর ফাইল"


450

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

থ্রেড "মূল" জাভা.লং.সিকিউরিটি এক্সেপশন ব্যতিক্রম: প্রকাশ্য মূল বৈশিষ্ট্যের জন্য অবৈধ স্বাক্ষর ফাইল ডাইজেস্ট

আমি ব্যাখ্যাটি অনুসন্ধানের জন্য এক ঘন্টা ধরে গুগল করেছি এবং খুব কম মূল্য খুঁজে পেয়েছি। যদি কেউ এই ত্রুটিটি আগে দেখে থাকে এবং কিছু সহায়তা দিতে পারে তবে আমি বাধ্য be


1
আপনি কি নিজের জারে সাইন ইন করার চেষ্টা করছেন? যদি তা হয় তবে আপনি কীভাবে এটিতে স্বাক্ষর করার চেষ্টা করছেন?
কোজি

না, কমপক্ষে আমি মনে করি না যে আমি am এক্সকোড নিজে নিজে এটিতে স্বাক্ষর করার চেষ্টা করছে, তবে এটি বন্ধ করার কোনও সেটিংস বলে মনে হচ্ছে না।

বাস্তবায়িত ইন্টারফেসযুক্ত জারগুলিও স্বাক্ষরিত হয়েছে কিনা তা পরীক্ষা করতে ভুলবেন না!
গৌরব

উত্তর:


47

এখানে তালিকাভুক্ত সমাধান একটি পয়েন্টার সরবরাহ করতে পারে।

ম্যানিফেস্টের প্রধান বৈশিষ্ট্যের জন্য অবৈধ স্বাক্ষর ফাইল ডাইজেস্ট

শেষের সারি :

অফিসিয়াল বয়ামটি যেমন রয়েছে তেমনই রাখা ভাল এবং কেবল আপনার অ্যাপ্লিকেশন জার ফাইলের জন্য ম্যানিফেস্ট ফাইলে নির্ভরতা হিসাবে যুক্ত করা।


3
আমি কীভাবে ম্যানিফেস্টের ফাইলটিতে এটি প্রতিবিম্বিত করব? আমি এর আগে কখনও সম্পাদনা করিনি। আমি এক্সকোড ব্যবহার করছি, এবং প্রচলিত কনভেনশনটি অন্তর্ভুক্তির জন্য মাইপ্রজেক্ট / লিব ডিরেক্টরিতে বাহ্যিক জার লাইব্রেরিগুলি রাখার জন্য যা আমি করছি।

@ ইউজার 123003 .. যেমনটি ইন্টেলি-জে
মাইকএম

13
দুর্ভাগ্যক্রমে আমাদের মধ্যে কিছু "মাভেন শেড প্লাগইন" এর মতো জিনিস ব্যবহার করে তাই মূল জারের
ভারব্যাটিম

এই সাইটে উত্তর দেওয়ার জন্য নির্লজ্জ প্লাগ : stackoverflow.com/a/30922181/448779
foo

মাভেন-অ্যাসেম্বলি-প্লাগইন সম্পর্কে কী? এটি আমার ক্ষেত্রে এই সমস্যাটি সমাধান করে
ঝিনে-ডি

1082

যাদের সাথে একটি উবার-জার তৈরি করার চেষ্টা করার সময় এই ত্রুটিটি পেয়েছিল তাদের জন্য maven-shade-plugin, সমাধানটি হ'ল প্লাগইন কনফিগারেশনে নিম্নলিখিত লাইনগুলি যুক্ত করে ম্যানিফেস্ট স্বাক্ষরকারী ফাইলগুলি বাদ দেওয়া:

<configuration>
    <filters>
        <filter>
            <artifact>*:*</artifact>
            <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
            </excludes>
        </filter>
    </filters>
    <!-- Additional configuration. -->
</configuration>

9
আমি আমার উবার-জারের জন্য এই পদ্ধতিটি ব্যবহার করেছি এবং এটি দুর্দান্ত কাজ করেছে। Maven.apache.org/plugins/maven-shade-plugin/exferences/… এ একটি সম্পূর্ণ POM উদাহরণ রয়েছে যা অন্তর্ভুক্ত ফাইলগুলিকে এই পদ্ধতিটি ফিল্টার করে দেখায়।
এম ডুডলি

4
আমি সম্পূর্ণ নতুন থ্রেড শুরু করার জন্য প্রলুব্ধ হয়েছিলাম - তবে যেহেতু এটি গুগলসের ফলাফলের মধ্যে 1 নম্বরে - তাই এটি এখানে রাখার জন্য উপযুক্ত বলে মনে হয়েছিল। এখানে তালিকাভুক্ত লাইনগুলি আমি যে পোম ফাইলটি ব্যবহার করছি তাতে রয়েছে - এবং অ্যাপ্লিকেশনটি চালানোর সময় আমি সুরক্ষা ত্রুটিটি পাচ্ছি। এটি জরিমানা তৈরি করে - এবং একটি উবার বয়াম না করার সময় - যেমনটি প্রত্যাশা করা হয় অবশ্যই কার্যকর হয়। এবং যদিও এটি অবশ্যই একটি বিকল্প - এগুলিকে আলাদা রাখুন - আপনি যদি উবার জার চান তবে এটি সমস্যার সমাধান করবে না।
গ্যাভিন বাউমানিস

7
এটি আমার পক্ষে কাজ করে তবে ... কেন আমাদের স্বাক্ষরকারী ফাইলগুলি উপেক্ষা করতে হবে? আমি নিশ্চিত স্বাক্ষর ম্যানিফেস্ট কোনও কারণে আছে ....
জেরিল কুক

4
উপরের কাজ করার পরে "এমভিএন ক্লিন" করতে ভুলবেন না!
কোডিনজয়াস

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

139

গ্রেড ব্যবহার করে এবং একটি ফ্যাট জার তৈরি এবং ব্যবহার করার চেষ্টা করছেন তাদের জন্য, নিম্নলিখিত বাক্য গঠনটি সহায়তা করতে পারে।

jar {
    doFirst {
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' 
}

1
এটি মূলত মাইটা-আইএনএফ ডিরেক্টরিতে .RSA, .SF, বা .DDA এর এক্সটেনশান সহ সমস্ত ফাইলকে বাদ দেয়।
কিথ পি

9
একটি জার ফাইলে সই করা এই ফাইলগুলি মেটা-আইএনএফ-এর অধীনে যুক্ত করে, তবে সেগুলি অন্তর্ভুক্ত করা হলে, স্বাক্ষরগুলি আর জারের সামগ্রীগুলির সাথে সম্মত হয় না। সুতরাং তাদের অপসারণ স্বাক্ষর মেলে না এড়ানো।
পিটার এন। স্টেইনমেটজ

1
- আছে কঠোরভাবে মধ্যে gradle চর্বি বয়াম ব্যবহার সম্পর্কে একটি অনুরূপ প্রশ্ন হল stackoverflow.com/questions/4871656/...
Tomasz Sętkowski

3
এটি আমার পক্ষে কাজ করে না। আমাকে excludeআমার fatJarকাজটি করতে হয়েছিল, যেটিতে সেই configurations.compile.collectআদেশ ছিল । দেখুন stackoverflow.com/a/31426413/103412
Torsten

1
এটি ত্রুটিটিও সমাধান করেError: Could not find or load main class App Caused by: java.lang.ClassNotFoundException: App
ভোনক্স 7

56

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

আপনি আপনার জারফিল নির্ভরতা থেকে স্বাক্ষর ফাইলগুলি মুছে ফেলে সমস্যার সমাধান করতে পারেন। দুর্ভাগ্যক্রমে, পিঁপড়ের এক ধাপে এটি করা সম্ভব নয়

যাইহোক, আমি প্রতিটি জারফিল নির্ভরতার নাম উল্লেখ না করে, দুটি পদক্ষেপে এন্টির সাথে এই কাজটি করতে সক্ষম হয়েছি:

<target name="jar" depends="compile" description="Create one big jarfile.">
    <jar jarfile="${output.dir}/deps.jar">
        <zipgroupfileset dir="jars">
            <include name="**/*.jar" />
        </zipgroupfileset>
    </jar>
    <sleep seconds="1" />
    <jar jarfile="${output.dir}/myjar.jar" basedir="${classes.dir}">
        <zipfileset src="${output.dir}/deps.jar" excludes="META-INF/*.SF" />
        <manifest>
            <attribute name="Main-Class" value="com.mycompany.MyMain" />
        </manifest>
    </jar>
</target>

ঘুমের উপাদানটি ভবিষ্যতে পরিবর্তনের তারিখ সহ ফাইলগুলি সম্পর্কে ত্রুটিগুলি রোধ করবে বলে ধারণা করা হচ্ছে ।

লিঙ্কযুক্ত থ্রেডগুলিতে আমি যে ভিন্নতাগুলি পেয়েছি সেগুলি আমার পক্ষে কার্যকর হয়নি।


আপনার জারগুলি নির্দিষ্ট করার জন্য আলাদা পদ্ধতি ব্যবহার করে এক ধাপে এটি করা সম্ভব: <জার ডাস্টফিল = "বিল্ড / মাইজার.জার"> <restected> <নোট> <নাম নাম = "মেটা-আইএনএফ / *। এসএফ" /> </not> <আর্কাইভস </ জিপস> <ফাইলসেট দির = "জারফোল্ডার" এর মধ্যে = " * / .jar" /> </zips> </archives> </
restict

56

নিম্নলিখিত কমান্ড ব্যবহার করুন

zip -d yourjar.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*SF'

4
আপনাকে ধন্যবাদ, আমি ইন্টিলিজ 14 এর সাথে এই সমস্যাটি পেয়েছিলাম এবং আপনার সমাধানটি আমার পক্ষে কাজ করে!
মোহামাদ কাউহি মোগদম

5
আপনাকে ধন্যবাদ, উইন্ডোজ আমার জন্য কাজ। স্রেফ 7zip দিয়ে জারটি খুললেন, .SF ফাইলগুলি মুছুন। মুছে ফেলার জন্য আমার কাছে কোনও .RSA ফাইল নেই
ক্যান্ডিনো

3
বাহ, আমি কী বলতে পারি যে এই সমাধানটি আশ্চর্যজনক ছিল (এবং আমি খুব শক্তিশালী কিছু শিখেছি!) এর আরও বেশি প্রয়োজন v
ডিলান_লারকিন

আমি @ ডিলান_লারকিনের মন্তব্যে একমত, এটিই আমার জন্য সমাধান করেছে।
ফিলিপ ভাল্ডেস

26

ইন্টেলিজ আইডিআইএ 14.01 ব্যবহার করার সময় আমার এই সমস্যা হয়েছিল।

আমি এটি দ্বারা এটি ঠিক করতে সক্ষম হয়েছি:

ফাইল-> প্রকল্পের কাঠামো-> মডিউল উইন্ডো থেকে জার তৈরির উপর নির্ভরতা সহ মডিউলগুলি থেকে নতুন (শৈলীসমূহ) -> জার- যোগ করুন:

আপনি প্রধান বর্গ নির্বাচন করুন

লাইব্রেরিগুলি থেকে জেআর ফাইল আউটপুট ডিরেক্টরিতে অনুলিপি নির্বাচন করুন এবং ম্যানিফেস্টের মাধ্যমে লিঙ্ক করুন


2
নির্ভরযোগ্য জারগুলি লক্ষ্য জারে রাখা কি সম্ভব?
কোডার। চেঞ্জি

আপনার সমাধান ভাল কাজ করে !! অনেক ধন্যবাদ!
hzitoun

19

সুরক্ষা ইতিমধ্যে একটি শক্ত বিষয়, তবে সর্বাধিক জনপ্রিয় সমাধানটি হ'ল সুরক্ষিত স্বাক্ষরগুলি মুছে ফেলা আমি হতাশ। জেসিই-র এই স্বাক্ষর প্রয়োজন । মাভেন শেড বাউন্সিস্টল জার ফাইলটি বিস্ফোরিত করে যা স্বাক্ষরগুলি মেটা-আইএনএফ-তে রাখে, তবে বাউন্সি ক্যাসল স্বাক্ষরগুলি নতুন, উবার-জারের জন্য বৈধ নয় (কেবলমাত্র বিসি জারের জন্য), এবং এই কারণেই এই থ্রেডে অবৈধ স্বাক্ষর ত্রুটির কারণ ঘটেছে

হ্যাঁ, @ruhsuzbaykus এর পরামর্শ অনুসারে স্বাক্ষরগুলি বাদ দেওয়া বা মুছে ফেলার ফলে আসল ত্রুটিটি প্রকৃতপক্ষে চলে যায়, তবে এটি নতুন, ক্রিপ্টিক ত্রুটিও ঘটাতে পারে:

java.security.NoSuchAlgorithmException: PBEWithSHA256And256BitAES-CBC-BC SecretKeyFactory not available

স্পষ্টভাবে নির্দিষ্ট করে দিয়ে কোথায় এই জাতীয় অ্যালগরিদম পাওয়া যায়:

SecretKeyFactory.getInstance("PBEWithSHA256And256BitAES-CBC-BC","BC");

আমি একটি ভিন্ন ত্রুটি পেতে সক্ষম হয়েছিল:

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC

জেসিই সরবরাহকারীকে প্রমাণীকরণ করতে পারে না কারণ আমরা একই থ্রেডের পরামর্শটি অন্যত্র অনুসরণ করে ক্রিপ্টোগ্রাফিক স্বাক্ষরগুলি মুছে ফেলেছি

আমি যে সমাধানটি পেয়েছি সেটি হ'ল এক্সিকিউটেবল প্যাকার প্লাগইন যা একক, এক্সিকিউটেবল জারে বাউনসিস্টল স্বাক্ষর সংরক্ষণের জন্য জার-ইন-জার পদ্ধতির ব্যবহার করে ।

আপডেট :

এটি করার আরেকটি উপায় (সঠিক উপায়?) হল মাভেন জার সাইনার ব্যবহার করা । এটি আপনাকে সুরক্ষা ত্রুটি না পেয়ে ম্যাভেন শেড ব্যবহার চালিয়ে যাওয়ার অনুমতি দেয়। তবুও, আপনার অবশ্যই একটি কোড সাইনিং শংসাপত্র থাকতে হবে (ওরাকল "জাভা কোড সাইনিং শংসাপত্রের জন্য অনুসন্ধান করার পরামর্শ দেয়)"। POM কনফিগারেশনটি দেখতে এমন দেখাচ্ছে:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>org.bouncycastle:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>your.class.here</mainClass>
                    </transformer>
                </transformers>
                <shadedArtifactAttached>true</shadedArtifactAttached>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jarsigner-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>sign</id>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
        <execution>
            <id>verify</id>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <keystore>/path/to/myKeystore</keystore>
        <alias>myfirstkey</alias>
        <storepass>111111</storepass>
        <keypass>111111</keypass>
    </configuration>
</plugin>

না, কোনও স্ব-স্বাক্ষরিত সার্টিফিকেট স্বীকৃতি দেওয়ার জন্য জেসিইর পাওয়ার কোনও উপায় নেই, সুতরাং যদি আপনাকে বাউনিসিস্টল শংসাপত্রগুলি সংরক্ষণ করার দরকার হয় তবে আপনাকে জার-ইন-জার প্লাগইন ব্যবহার করতে হবে বা জেসিই সার্টিফিকেট পেতে হবে।


এটি নিবিড়ভাবে কাজ করার পরেও এটি করার সঠিক উপায় do নির্দিষ্টভাবে নির্দেশিত হওয়ার জন্য ধন্যবাদ, অনুমোদিত উত্তরটি ব্যবহার করে সতর্কীকরণগুলি। আপনি কি জানেন যে জেসিই সার্টে সনের স্বাক্ষর রাখতে হবে কিনা? বা করতে পারেন
ওয়াইটকাস্টল

1
তৃতীয় পক্ষ রয়েছে যা কোড স্বাক্ষরকারী শংসাপত্রগুলি ইস্যু করতে পারে। বিকল্পগুলি দেখতে "জাভা কোড স্বাক্ষরকারী শংসাপত্র" অনুসন্ধান করুন।
ম্যাটডাব্লু

আপনি, স্যার, আমার দিন তৈরি!
সোসোনা

আমার জন্য সাহায্য। এই লাইব্রেরিতে কিছু ফাইল রয়েছে যা আমি ব্যবহার করি না, সুতরাং এগুলি বাদ দিয়ে আমাকে ফ্যাট-জারের ফাইলটি সহায়তা করুন
সাইডলিম

14

আমি একই সমস্যার মুখোমুখি হয়েছিলাম, কোথাও রেফারেন্সের পরে, এটি নীচের পরিবর্তিত হিসাবে কাজ করেছে:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

1
এটি আমার সমস্যা দ্রুত সমাধান! সম্পূর্ণতার জন্য, এটি maven-shade-pluginট্যাগে থাকা উচিত ।
কুজেকো

1
@ কুজেকো আপনার পরামর্শ অনুসারে অ্যাঞ্জারটি আপডেট করেছে। ধন্যবাদ
m.nguyencntt

8

ধরে নিই যে আপনি পিঁপড়ের সাথে আপনার জার ফাইলটি তৈরি করেন, আপনি পিঁপড়াকে কেবল মেটা-আইএনএফ ডায়ার ছাড়তে নির্দেশ দিতে পারেন। এটি আমার পিঁপড় টার্গেটের সরলিকৃত সংস্করণ:

<jar destfile="app.jar" basedir="${classes.dir}">
    <zipfileset excludes="META-INF/**/*" src="${lib.dir}/bcprov-jdk16-145.jar"></zipfileset>
    <manifest>
        <attribute name="Main-Class" value="app.Main"/>
    </manifest>
</jar>

আমার এই লাইনগুলি কোথায় যুক্ত করা উচিত?
অ্যাডি.স্টার

4

আমি সম্প্রতি আমার প্রকল্পগুলিতে ইন্টেলিজ ব্যবহার শুরু করেছি। যাইহোক, আমার কিছু সহকর্মী এখনও একই প্রকল্পগুলিতে Eclipse ব্যবহার করে। আমার ইনটেলিজে দ্বারা নির্মিত জার-ফাইলটি কার্যকর করার পরে আজ আমি খুব একই ত্রুটি পেয়েছি। যদিও এখানে সমস্ত সমাধান প্রায় একই জিনিস সম্পর্কে কথা বলছে, সেগুলির মধ্যে কেউই সহজেই আমার পক্ষে কাজ করেনি (সম্ভবত আমি এএনটি ব্যবহার করি না বলে, মাভেন বিল্ড আমাকে অন্য ত্রুটি দিয়েছে যা আমাকে http://cwiki.apache.org/ উল্লেখ করেছে gave সঙ্গম / প্রদর্শন / MAVEN / মোজো এক্সেকিউশন এক্সসেপশন , এবং আমি নিজেই স্বাক্ষরিত জারগুলি কী তা বুঝতে পারি না!)

অবশেষে, এটি আমাকে সাহায্য করেছিল

zip -d demoSampler.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*SF'

অনুমান করুন আমার জার ফাইলটি থেকে কী সরিয়ে দেওয়া হয়েছে ?!

deleting: META-INF/ECLIPSE_.SF 
deleting: META-INF/ECLIPSE_.RSA

দেখে মনে হচ্ছে সমস্যাটি কিছুগ্রহণ-সম্পর্কিত ফাইলের সাথে সম্পর্কিত ছিল।


4

আমি gradleএকটি ফ্যাট জার তৈরি করার সময় একই সমস্যা ছিল , build.gradleএকটি বর্জনিত লাইন দিয়ে ফাইল আপডেট করে সমস্যাটি সংশোধন করে।

jar {
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
    manifest {
        attributes 'Main-Class': 'com.test.Main'
    }
}

1
আমি কয়েক দিন ধরে ডিবাগ করছিলাম, এটি আমার ফ্যাট জারের সমস্যাটি সমাধান করেছে।
sysuser

আমি যেভাবে ডিবাগ করলাম তা হ'ল চর্বিযুক্ত জারকে জমিটার lib ডিরেক্টরিতে। আপনি lib / অনুপস্থিত EXT মধ্যে সমস্যাযুক্ত বয়াম থেকে থাকে, তাহলে এই সমস্যা সুস্পষ্ট হবে না, বরং আপনি এক মত একটি ত্রুটি পাবেন stackoverflow.com/questions/37624187/...
sysuser

1
'মেটা-আইএনএফ / *। আরএসএ', 'মেটা-আইএনএফ / *। এসএফ', 'মিতা-আইএনএফ / *। ডিএসএ' বাদ দেওয়া হয়েছে, কিছু নির্ভরশীল জার ইস্যুটির কারণ হয়ে দাঁড়িয়েছিল
নির্ব্বয় মিশ্র

3

আপনি গ্রেড ব্যবহার করছেন এমন ক্ষেত্রে এখানে পুরো ফোরজার কাজটি করা হয়েছে:

version = '1.0'
//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',  
            'Implementation-Version': version,
            'Main-Class': 'com.example.main'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' 
    with jar
}

2

পুরানো জারের সাথে নতুন জারে মেটা-আইএনএফ ফোল্ডারটি তুলনা করুন (আপনি নতুন লাইব্রেরি যুক্ত করার আগে)। নতুন ফাইল আসার সম্ভাবনা রয়েছে। যদি হ্যাঁ, আপনি সেগুলি সরাতে পারেন। এটি সাহায্য করা উচিত। শুভেচ্ছা, 999 মিমিকাল


2

প্রতিটি জার ফাইল থেকে স্বাক্ষর অপসারণকে সহজ করার জন্য একটি কৌশল এএনটি ব্যবহার করে। এটি নিম্নলিখিত পদক্ষেপগুলি নিয়ে এগিয়ে যাবে:

  1. অস্থায়ী ফাইলে MANIFEST.MF অনুলিপি করা হচ্ছে
  2. সরানো হচ্ছে নাম এবং রয়েছে SHA অস্থায়ী ফাইল থেকে এন্ট্রি
  3. অস্থায়ী ম্যানিফেস্টের সাহায্যে একটি অস্থায়ী জার ফাইল তৈরি করা
  4. অস্থায়ী মেনিফেস্ট সরানো হচ্ছে
  5. অস্থায়ী সাথে মূল জার ফাইলটি অদলবদল করা হচ্ছে

এখানে একটি এএনটি ম্যাক্রোডিফ কাজ করছেন:

<macrodef name="unsignjar" description="To unsign a specific Jar file">
    <attribute name="jarfile" 
        description="The jar file to unsign" />
    <sequential>
<!-- Copying to the temporary manifest file -->
        <copy toFile="@{jarFile}_MANIFEST.tmp">
            <resources>
                <zipentry zipfile="@{jarFile}" name="META-INF/MANIFEST.MF"/>
            </resources>
        </copy>
<!-- Removing the Name and SHA entries from the temporary file -->
        <replaceregexp file="@{jarFile}_MANIFEST.tmp" match="\nName:(.+?)\nSH" replace="SH" flags="gis" byline="false"/>
        <replaceregexp file="@{jarFile}_MANIFEST.tmp" match="SHA(.*)" replace="" flags="gis" byline="false"/>
<!-- Creating a temporary Jar file with the temporary manifest -->
        <jar jarfile="@{jarFile}.tmp"
            manifest="@{jarFile}_MANIFEST.tmp">
            <zipfileset src="@{jarFile}">
                <include name="**"/>
                <exclude name="META-INF/*.SF"/>
                <exclude name="META-INF/*.DSA"/>
                <exclude name="META-INF/*.RSA"/>
            </zipfileset>
        </jar>
<!-- Removing the temporary manifest -->
        <delete file="@{jarFile}_MANIFEST.tmp" />
<!-- Swapping the original Jar file with the temporary one -->
        <move file="@{jarFile}.tmp"
              tofile="@{jarFile}"
              overwrite="true" />
</sequential>

`

সংজ্ঞাটিকে তখন এএনটি টাস্কে বলা যেতে পারে:

<target name="unsignJar">
    <unsignjar jarFile="org.test.myjartounsign.jar" />
</target>

2

ত্রুটি: একটি জেএনআই ত্রুটি ঘটেছে, দয়া করে আপনার ইনস্টলেশনটি পরীক্ষা করে দেখুন এবং আবার চেষ্টা করুন থ্রেড "মেইন" জাভা.লাংয়ের ব্যতিক্রম Sসিকিউরিটি এক্সসেপশন: সূর্য.সিকিউরিটি.ইটি.ল.সিগনেচারফাইলেফায়ার.প্রসেস আইপল (SignatureFileVerifier.java: এ ম্যানিফেস্টের মূল বৈশিষ্ট্যের জন্য অবৈধ স্বাক্ষর ফাইল ডাইজেস্ট: 314) at sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier.java Used6868) at java.util.jar.JarVerifier.processEntry (JarVerifier.java:316) at java.util.jar.JarVerifier.update.arverifier.update.arverifier.update.arvaerifier.update. : 228) java.util.jar.JarFile.initializeVerifier (JarFile.java:383) at java.util.jar.JarFile.getInputStream (জারফিল.জভা:450) at sun.misc. URLClassPath ar JarLoader URL 2.getInlassPream (URL) । java: 977) at sun.misc.Resource.cachedInputStream (Resource.java:77) at sun.misc.Resource.getByteBuffer (রিসোর্স.জাভা:160) java.net.URLClassLoader.defineClass (URLClassLoader.java:454) at java.net. URLClassLoader.access j 100 (URLClassLoader.java:73) at java.net. URLClassLoader $ 1.run (URLClassLoader.java:368) java.net.URLClassLoader j 1.run (URLClassLoader.java:362) at java.security.AccessController.doPrivileged (নেটিভ মেথড) at java.net. URLClassLoader.findClass (URLClassLoader.java:361) java.lang.ClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoClassoLlass উপর (ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java.331) at java.lang.ClassLoader.loadClass (ClassLoader.java:357) at sun.launcher.LauncherHelperCheckAndLoaden (ল্যাচআরএলআউটচার)। জাভা: 495)java.net. URLClassLoader.java:368) এ জাভা.সিকিউরিটিতে r 1.run (URLClassLoader.java:362) চালান cএকসেস কন্ট্রোল.আর.প্রাইভাইলড (নেটিভ মেথড) java.net. URLClassLoader.findClass (URLClassL61) ) java.lang.ClassLoader.loadClass (ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at java.lang.ClassLoader.loadClass (ClassLoader.java:357) সূর্য এ .launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)java.net. URLClassLoader.java:368) এ জাভা.সিকিউরিটিতে r 1.run (URLClassLoader.java:362) চালান cএকসেস কন্ট্রোল.আর.প্রাইভাইলড (নেটিভ মেথড) java.net. URLClassLoader.findClass (URLClassL61) ) java.lang.ClassLoader.loadClass (ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at java.lang.ClassLoader.loadClass (ClassLoader.java:357) সূর্য এ .launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)331) java.lang.ClassLoader.loadClass এ (ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)331) java.lang.ClassLoader.loadClass এ (ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)

আমাকে কী সাহায্য করেছে (ইন্টেলিজ আইডিয়া 2016.3): ফাইল -> প্রকল্পের কাঠামো -> শৈলীসমূহ -> জার যুক্ত করুন -> প্রধান শ্রেণি নির্বাচন করুন -> "আউটপুট ডিরেক্টরিতে অনুলিপি নির্বাচন করুন এবং ম্যানিফেস্টের মাধ্যমে লিঙ্ক করুন" -> ঠিক আছে -> প্রয়োগ করুন -> বিল্ড - > শিল্পকর্ম তৈরি করুন ... -> তৈরি করুন


1

এটি সম্ভব যে দুটি ভিন্ন স্বাক্ষরকারীরা জাভা মনকে গোলমাল করে।

জার থেকে মেটা-আইএনএফ ফোল্ডারটি সরানোর চেষ্টা করুন, ম্যানিফেস্ট যুক্ত করুন এবং আবার জেআর স্বাক্ষর করুন, এটি আমাকে সহায়তা করেছে: http://jehy.ru/articles/2013/12/13/in अवैध-signature-file-digest-for-manifest- main- বৈশিষ্ট্যাবলী /


1
লিঙ্কের জন্য +1। মেটা-আইএনএফ * .আরএসএ এবং মেটা-আইএনএফ * .এসএফ মুছে ফেলার জন্য আমি আমার জন্য সমস্যাগুলি সমাধান করার জন্য কাজ করছিলাম। YMMV
KathyA।

1

আপনি যদি মূল লাইব্রেরিগুলি প্যাক না করে বা কোনও বিশেষ জেআর শ্রেণিবদ্ধের সাথে টেম্পারিং ছাড়াই কোনও ফ্যাট জেআর সমাধান সন্ধান করছেন তবে আমার প্রকল্পটি এখানে দেখুন

দাবি অস্বীকার: আমি কোডটি লিখি নি, কেবল এটি প্যাকেজ করেছি এবং এটি মাভেন সেন্ট্রালে প্রকাশ করেছি এবং এটি কীভাবে ব্যবহার করতে হয় তা আমার পঠন-বিবরণীতে বর্ণনা করি।

আমি ব্যক্তিগতভাবে এটিকে বাউনসিস্টল নির্ভরতা যুক্ত রানেরেবল উবার জার তৈরি করতে ব্যবহার করি। হতে পারে এটি আপনার পক্ষেও কার্যকর।


0

যাদের গ্রহণযোগ্য সমাধানে সমস্যা রয়েছে তাদের জন্য ছায়াময়িত জার থেকে ডন্টইনক্লায়সারসোর্স ট্রান্সফরমার দিয়ে রিসোর্স বাদ দেওয়ার আরও একটি উপায় রয়েছে:

https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#DontIncludeResourceTransformer

          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>BC1024KE.DSA</resource>
            </transformer>
          </transformers>

শেড 3.0 থেকে, এই ট্রান্সফর্মার সংস্থানগুলির একটি তালিকা গ্রহণ করে। এর আগে আপনাকে কেবল এক রিসোর্স সহ একাধিক ট্রান্সফর্মার ব্যবহার করতে হবে।


0

ইন্টেলিজ যখন আমার সাথে নীচের লাইনে "অ্যাড অফ দ্য ম্যাভেন প্রজেক্ট" ক্লিক করেছিলেন তখন আমার সাথে এটি ঘটেছিল যখন ইন্টেলিজ বলেছিল "নন-ম্যানেজড পোম ফাইলগুলি পাওয়া গেছে।" ইতিমধ্যে আউট ফোল্ডার ইতিমধ্যে তৈরি করা হয়েছিল। সুতরাং এটি সাম্প্রতিক পরিবর্তনগুলি পায় নি।

ফোল্ডারটি মোছা এবং প্রোগ্রামটি চালানো আমার জন্য সমস্যাটি সমাধান করেছে। আউট ফোল্ডারটি আবার তৈরি করা হয়েছিল।

লিটল ফক্সের উত্তরও দেখুন। আমি যে ত্রুটিটি পেয়েছি তার সাথে খুব মিল ছিল।


-1

আমারও একই সমস্যা ছিল। কারণটি ছিল যে আমি আমার উইন্ডোজ বাক্সে ডিফল্টর চেয়ে আলাদা জেআরই দিয়ে একটি জেডিকে ব্যবহার করে সংকলন করছি was

সঠিক java.exe ব্যবহার করে আমার সমস্যার সমাধান হয়েছে।


-2

জ্যামারিন.এন্ড্রয়েড বাইন্ডিংস প্রকল্পের জন্য জেআর ফাইলগুলি আবদ্ধ করার চেষ্টা করার সময় আপনি যদি এটি পান:

JARTOXML: সতর্কতা J2XA006: অনুপস্থিত শ্রেণি ত্রুটি com.your.class প্রতিফলিত করার সময় উত্থাপিত হয়েছিল: ম্যানিফেস্টের প্রধান বৈশিষ্ট্যের জন্য অবৈধ স্বাক্ষর ফাইল ডাইজেস্ট

উইনজিপ ব্যবহার করে কেবল জার ফাইলগুলি খুলুন এবং মেটা-ইনফ ডিরেক্টরিগুলি মুছুন। পুনর্নির্মাণ - কাজ শেষ হয়েছে


1
এটি একটি ভয়ঙ্কর কৌশল technique একেবারে ভয়াবহ স্থানীয়ভাবে সংশোধন করুন আগত জারে পরিবর্তন করবেন না
sinisterrook
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.