कमांडलाइन (javac या apt) पर क्लासपाथ में जार शामिल करना


137

इस कार्यक्रम को चलाने की कोशिश कर रहा है। मुझे लगता है कि वेब सेवा के सभी सामान को सेटअप करने के लिए मुझे उपयुक्त तरीके से चलना होगा। (हालांकि javac का उपयोग कर मैं एक ही मुद्दा रहा है)। मुझे लगता है कि मुझे जो मिल रहा है वह संकलन त्रुटियों है। (नीचे दिखाया गया)।

मुझे लगता है कि मुझे क्या करने की ज़रूरत है इस जार को अपने वर्ग पथ में शामिल करें: jsr181-api.jar (स्रोत) । क्या ऐसा करने का एक सरल अस्थायी तरीका है (सोलारिस पर)? मैं इसे अपनी bash_rc फ़ाइल में जोड़ना नहीं चाहता (यह हमेशा के लिए है)। मुझे यह भी पता है कि एक प्रकट पाठ फ़ाइल का उपयोग करने का कोई तरीका है, लेकिन यह जटिल लग रहा था इसलिए मैंने अभी तक इस पर ध्यान नहीं दिया। क्या मैं ऐसा कुछ कर सकता हूं:

javac HelloImp <listOfJars>

या

ant HelloImp <listOfJars>

कोड:

package server;

import javax.jws.WebService;

@WebService
public class HelloImpl {

  /**
   * @param name
   * @return Say hello to the person.
   */
   public String sayHello(String name) {
     return "Hello, " + name + "!";
   }
}

संकलन त्रुटियाँ:

HelloImpl.java:3: package javax.jws does not exist
import javax.jws.WebService;
                 ^
HelloImpl.java:5: cannot find symbol
symbol: class WebService
@WebService
 ^
2 errors

अपडेट: कूल जो लिपटा हुआ है लेकिन यह अभी भी काफी काम नहीं कर रहा है। मैंने चीजों को अच्छा और व्यवस्थित रखने के लिए एक नया प्रश्न बनाया है :


एक साइड नोट के रूप में, कुछ जार को केवल संकलन (यानी javac) के दौरान आवश्यक है, लेकिन रनटाइम (यानी java) पर नहीं। उदाहरण के लिए, lombokजार।
truthadjustr

जवाबों:


170

निम्नलिखित आज़माएँ:

java -cp jar1:jar2:jar3:dir1:. HelloWorld

डिफ़ॉल्ट classpath (जब तक कोई CLASSPATH पर्यावरण चर नहीं है) वर्तमान निर्देशिका है इसलिए यदि आप इसे फिर से परिभाषित करते हैं, तो सुनिश्चित करें कि आपने वर्तमान निर्देशिका (।) को कक्षापाठ में जोड़ दिया है जैसा कि मैंने किया है।



@ CoolAJ86 लिंक से लगता है कि मृत हो गया है
Janis Peisenieks

30
सबसे अच्छा तरीका मुझे मिल गया है java -cp *:. HelloWorld। इस तरह मेरे क्लासपाथ में सभी जार हमेशा शामिल होते हैं।
एनएन

31

खिड़कियों में:

java -cp C:/.../jardir1/*;C:/.../jardir2/* class_with_main_method

सुनिश्चित करें कि मुख्य फ़ंक्शन के साथ वर्ग में शामिल जार में से एक है


20

विंडोज उपयोगकर्ताओं के लिए ध्यान दें, जार को अलग किया जाना चाहिए ;और नहीं :

उदाहरण के लिए: javac -cp external_libs\lib1.jar;other\lib2.jar;


14

-cpया -classpathस्विच का उपयोग करें ।

$ java -help  
Usage: java [-options] class [args...]  
           (to execute a class)  
   or  java [-options] -jar jarfile [args...]  
           (to execute a jar file)  

where options include:  
...  
    -cp <class search path of directories and zip/jar files>  
    -classpath <class search path of directories and zip/jar files>  
                  A ; separated list of directories, JAR archives,  
                  and ZIP archives to search for class files.  

(ध्यान दें कि विभाजक वर्गपथ पर प्रविष्टियों को अलग करने के लिए उपयोग किया जाता है जो ओएस के बीच भिन्न होता है, मेरी विंडोज मशीन पर यह ;* निक्स में आमतौर पर होता है :।)


3

का उपयोग करते हुए:

apt HelloImpl.java -classpath /sac/tools/thirdparty/jaxws-ri/jaxws-ri-2.1.4/lib/jsr181-api.jar:.

काम करता है लेकिन यह मुझे एक और त्रुटि देता है, नया प्रश्न देखें


2

javac HelloWorld.java -classpath ./javax.jar, मान लेना javax चालू फ़ोल्डर में है, और संकलन लक्ष्य "HelloWorld.java" है, और आप एक मुख्य विधि के बिना संकलन कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.