গ্রেডল- কোনও প্রধান ম্যানিফেস্ট বৈশিষ্ট্য


92

গ্র্যাডল বন্ধ করে দেওয়া একটি জেআর ফাইল চালানোর সময় আমি এই ত্রুটিটি নিয়ে পাগল হয়ে যাচ্ছি। ত্রুটিটি "আরএক্সজেভাডেমো.জারে কোনও প্রধান ম্যানিফেস্ট এট্রিবিউট নেই" পড়েছিল, আমি ম্যানিফেস্ট সম্পত্তিটি হেরফের করার চেষ্টা করেছি তবে আমি মনে করি আমি এর সাথে নির্ভরতা বা কিছু যুক্ত করতে ভুলে যাচ্ছি। আমি কি ভুল করছি?

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'demo.MainDashboard'

dependencies {
    compile files ("H:/Processes/Development/libraries/hikari-cp/HikariCP-2.4.1.jar")
    compile files ("H:/Processes/Development/libraries/controls-fx/controlsfx.jar")
    compile files ("H:/Processes/Development/libraries/database_connections/sqlite-jdbc-3.8.6.jar")
    compile files ("H:/Processes/Development/libraries/guava/guava-18.0.jar")
    compile files ("H:/Processes/Development/libraries/rxjava/rxjava-1.0.12.jar")
    compile files ("H:/Processes/Development/libraries/rxjava-extras/rxjava-extras-0.5.15.jar")
    compile files ("H:/Processes/Development/libraries/rxjavafx/RxJavaFX-1.0.0-RC1-SNAPSHOT.jar")
    compile files ("H:/Processes/Development/libraries/rxjavaguava/rxjava-guava-1.0.3.jar")
    compile files ("H:/Processes/Development/libraries/rxjava-jdbc/rxjava-jdbc-0.6.3.jar")
    compile files ("H:/Processes/Development/libraries/slf4j/slf4j-api-1.7.12.jar")
    compile files ("H:/Processes/Development/libraries/tom-commons/tom-commons.jar")
}

sourceSets {
    main.java.srcDir "src/main/java"
    main.resources.srcDir "src/main/resources"
}

jar { 
    manifest {
    attributes(
        "Class-Path": configurations.compile.collect { it.getName() }.join(' '))
    }
    from configurations.compile.collect { entry -> zipTree(entry) }
}

উত্তর:


143

আপনার ম্যানিফেস্ট বৈশিষ্ট্যগুলি পরিবর্তন করার চেষ্টা করুন:

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'hello.HelloWorld'
    )
  }
}

এবং তারপরে পরিবর্তন 'hello.helloWorld'করুন '<your packagename>.<the name of your Main class>'(যেখানে আপনার মেইন ক্লাসের একটি প্রধান পদ্ধতি রয়েছে)। এই ক্ষেত্রে, আপনি আপনার ম্যানিফেস্টে একটি বৈশিষ্ট্য তৈরি করেন, যা এই শ্রেণীর দিকে নির্দেশ করে, তারপরে একটি জার চলছে।


4
@ স্ট্যানিস্লাভ 'মেইন-ক্লাস' মানটি কি প্রধান শ্রেণি? হ্যালো এবং হ্যালো ওয়ার্ল্ড আপনার উদাহরণে কি?
ড্যানিয়েলা মিয়া

4
@ ড্যানিয়েলামাইয়া এটি কেবল একটি সম্পূর্ণ যোগ্য শ্রেণীর নাম, নিশ্চিত যে এটি হ্যালো হিসাবে লিখতে হবে e হেলো ওয়ার্ল্ড, হ্যালো এমন প্যাকেজ যেখানে হ্যালো ওয়ার্ল্ড শ্রেণিটি অবস্থিত
স্ট্যানিসালভ

9
collect {}অংশটি আমার পক্ষে কাজ করার জন্য এটি সরানোর দরকার ছিল । আপনার কোড ধরে নিয়েছে যে সমস্ত নির্ভরতাগুলি আপনার মূল শ্রেণীর মতো একই ফোল্ডারে।
স্বায়ত্তশাসিত

1

এফডব্লিউআইডাব্লু - আমি আমার সমস্ত সংকলন নির্ভরতা জার ফাইলে একত্রিত করতে নিম্নলিখিত জার টাস্কটি ব্যবহার করেছি এবং ক্লাস-পাথটি সঠিকভাবে সেট করতে উপরের প্রস্তাবনাটি ব্যবহার করেছি

apply plugin: 'java-library'

jar {
  manifest {
    attributes(
      'Class-Path': configurations.compile.collect { it.getName() }.join(' '),
      'Main-Class': 'your.main.class.goes.here'
    )
  }

  // You can reference any part of the dependency configurations,
  // and you can have as many from statements as you need
  from configurations.compile  
  // I just copied them into the top of the jar, so it looks like the eclipse exported 
  // runnable jar, but you could designate a lib directory, and reference that in the 
  // classpath as "lib/$it.name" instead of it.getName()
  into ''   
}

0

jarফাইলটি এক্সিকিউটেবল করার জন্য (যাতে java -jarকমান্ডটি কাজ করে), Main-Classএট্রিবিউটটি নির্দিষ্ট করে MANIFEST.MF

গ্রেডলে, আপনি jarটাস্কটি কনফিগার করে এটি করতে পারেন ।

  • জন্য খাঁজকাটা ডিএসএল এর উত্তরগুলি দেখতে ( [1] , [2] )
  • জন্য Kotlin ডিএসএল আপনাকে নিম্নলিখিত কোড স্নিপেট ব্যবহার করতে পারেন:
tasks.withType<Jar> {
    manifest {
        attributes["Main-Class"] = "com.caco3.Main"
    }
}

mainClassNameআশানুরূপ কাজ হয় না কেন ?

বা কেন mainClassNameম্যানিফেস্টে বৈশিষ্ট্যটি নির্দিষ্ট করে না?

mainClassNameসম্পত্তি থেকে আসে applicationপ্লাগইন । প্লাগইন:

উন্নয়নের সময় স্থানীয়ভাবে অ্যাপ্লিকেশন শুরু করা সহজ করে তোলে , এবং অ্যাপ্লিকেশনটিকে একটি টিআর এবং / অথবা জিপ হিসাবে অপারেটিং সিস্টেমের নির্দিষ্ট স্টার্ট স্ক্রিপ্ট সহ প্যাকেজ করা সহজ করে তোলে ।

সুতরাং applicationপ্লাগইন নির্বাহযোগ্য jarগুলি উত্পাদন করতে লক্ষ্য রাখে না

যখন কোনও mainClassNameসম্পত্তি সেট হয়, তারপরে:

  1. $ ./gradlew runmainবৈশিষ্ট্যটিতে নির্দিষ্ট ক্লাসে পদ্ধতিটি চালু করবে
  2. zip/ tarব্যবহার করে নির্মিত সংরক্ষণাগার distZip/ distTarকর্ম একটি স্ক্রিপ্ট, যা আরম্ভ হবে উপস্থিত থাকবে mainনিদিষ্ট পূর্বে বর্গ পদ্ধতি।

শেল স্ক্রিপ্টের লাইনটি এখানে প্রধান শ্রেণি নির্ধারণ করছে:

$ grep Main2 gradletest
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLETEST_OPTS -classpath "\"$CLASSPATH\"" com.caco3.gradletest.Main2 "$APP_ARGS"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.