Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно подцепить jar? / 19 сообщений из 19, страница 1 из 1
28.01.2007, 22:06:51
    #34288304
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Добрый вечер!

Исходные данные
Есть 2 класса:
1. myPoint.class
2. myLine.class (который использует myPoint.class)

Создан еще один класс Proba.class (находится в d:\Proba), в котором создаются экземпляры классов myPoint и myLine. (и в том и в другом классе, на всякий случай, все методы сделал public)
В Proba.class импортировал Geometry. ( import Geometry.*; )

Классы myPoint и myLine упакованы в Geometry.jar и находятся в ..\jdk1.3\jre\lib\ext (в одной книге прочитал, что если *.jar помещен в эту директорию, то он находится автоматически и параметр -classpath при запуске не требуется). Теперь пробую запустить Proba.class на выполнение следующим образом: D:/Proba> java Proba
Выдает исключительную ситуацию. К сожалению, пишу не со своего компа, помню только, что в названии присутствовало, что-то вроде: java.lang.NoDefFoundException: Proba.

Соответственно, вопросы:
1. Что я делаю неправильно?
2. Как правильно подцеплять jar-архивы.

Заранее спасибо.
С уважением.
...
Рейтинг: 0 / 0
28.01.2007, 23:24:44
    #34288372
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
- если Вы приводите правильное сообщение об ошибке, то в нем ругань идет не на классы хранящиеся в JAR-е, а на класс Proba, который в JAR не упакован. Соответственно надо думать о том как найти класс находяйщийся в папке d:\Proba.
Попробуйте такую конструкцию:
Код: plaintext
1.
D:/Proba> java -cp . Proba
- что означает подключить к CLASSPATH текущую директорию со всеми, находящимися в ней классами (в данном случае D:/Proba). Аналогично можно подключать JAR файлы:
Код: plaintext
1.
D:/Proba> java -cp .;c:\dir\Geometry.jar Proba
...
Рейтинг: 0 / 0
29.01.2007, 10:16:51
    #34288775
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Встречные вопросы:
1. Т.е. класс, который я хочу запустить также должен быть упакован в Geometry.jar? Как, в данном случае, следует запускать Proba.class (если он находится в Geometry.jar вместе с классами,кземпляры которых он создает)?
2. Можно ли просто подцепить Geometry.jar при запуске Proba.class, не укпаковывая его в Geometry.jar?

Заранее благодарен.
С уважением
...
Рейтинг: 0 / 0
29.01.2007, 12:12:22
    #34289219
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В.В.Встречные вопросы:
1. Т.е. класс, который я хочу запустить также должен быть упакован в Geometry.jar? Как, в данном случае, следует запускать Proba.class (если он находится в Geometry.jar вместе с классами,кземпляры которых он создает)?
2. Можно ли просто подцепить Geometry.jar при запуске Proba.class, не укпаковывая его в Geometry.jar?
Заранее благодарен.
С уважением
1. Лучше ничего в lib/ext не размещать. Это все равно, что свои DLL кидать в system32.
2. Все что вам нужно, это чтобы переменная CLASSPATH указывала на файл geometry.jar. В принципе, последняя приведенная строка запуска как раз это и делает. (ключ cp задает classpath)
...
Рейтинг: 0 / 0
29.01.2007, 13:45:49
    #34289671
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Тогда я, вообще, ничего не понимаю.

Вот смотрите:
myPoint.class и myLine.class я скопировал в d:\Packages\Geometry.
Затем в d:\Packages создал jar: d:\Packages> jar cvf Geometry.jar Geometry\*.class

Proba.class находится в d:\Proba. Пробую его запустить: D:/Proba> java -cp .;c:\dir\Geometry.jar Proba

Результат: Exception in thread "main" java.lang.NoClassDefFoundError: Proba

Как быть?

Заранее благодарен.
С уважением.
...
Рейтинг: 0 / 0
29.01.2007, 13:51:04
    #34289695
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В Probа правильно определен
Код: plaintext
 public   static   void  main(String[] args)
?
...
Рейтинг: 0 / 0
29.01.2007, 13:52:02
    #34289698
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В.В.Тогда я, вообще, ничего не понимаю.

Вот смотрите:
myPoint.class и myLine.class я скопировал в d:\Packages\Geometry.
Затем в d:\Packages создал jar: d:\Packages> jar cvf Geometry.jar Geometry\*.class

Proba.class находится в d:\Proba. Пробую его запустить: D:/Proba> java -cp .;c:\dir\Geometry.jar Proba

Результат: Exception in thread "main" java.lang.NoClassDefFoundError: Proba

Как быть?

Заранее благодарен.
С уважением.
Во-первых, из описанного должно быть: java -cp .;c:\ Packages \Geometry.jar Proba.
Во-вторых, приведите исходник Proba.java. Хотя бы первые несколько строчек, чтобы увидеть - в каком он package.
...
Рейтинг: 0 / 0
29.01.2007, 14:01:25
    #34289742
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
ЗашедшийВо-первых, из описанного должно быть: java -cp .;c:\ Packages \Geometry.jar Proba.
Тьфу, то есть
java -cp .; D:\Packages \Geometry.jar Proba
А вообще советую почитать хотя бы FAQ на этом форуме. Многие вопросы отпадут, в том числе и данный.
...
Рейтинг: 0 / 0
29.01.2007, 14:28:31
    #34289834
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Сорри. Конечно, запускал так:
Код: plaintext
java -cp .;d:\Packages\Geometry.jar Proba

Файл Proba.java:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 import  Geometry.*;

 public   class  Proba 
{
	
	 public   static   void  main(String[] args) 
	{
		

		 myPoint start =  new  myPoint( 10 . 0 ,  10 . 0 ,  0 ,  0 );
	     myPoint end = start.movePoints(start, 5 . 0 ,- 10 . 0 );

	    	myLine line  =  new  myLine(start,end);



		System.out.println(start);
       System.out.println(end);
        System.out.println(line);

        System.out.println("Start point location in " + start.quart() + " quarts");
        System.out.println("End point location in " + end.quart() + " quarts");

	}
}

Только он не в package, Проблема в том, что когда myPoint.class и myLine.class не упакованы в Geometry.jar все работает нормально (естественно с параметром -classpath), а вот когда они упакованы в Geometry.jar -classpath уже не помогает.

Заранее благодарен.
С уважением.
...
Рейтинг: 0 / 0
29.01.2007, 14:35:34
    #34289864
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
...
Рейтинг: 0 / 0
29.01.2007, 14:46:41
    #34289914
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В.В.Сорри. Конечно, запускал так:
Код: plaintext
java -cp .;d:\Packages\Geometry.jar Proba

Файл Proba.java:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 import  Geometry.*;

 public   class  Proba 
{
	
	 public   static   void  main(String[] args) 
	{
		

		 myPoint start =  new  myPoint( 10 . 0 ,  10 . 0 ,  0 ,  0 );
	     myPoint end = start.movePoints(start, 5 . 0 ,- 10 . 0 );

	    	myLine line  =  new  myLine(start,end);



		System.out.println(start);
       System.out.println(end);
        System.out.println(line);

        System.out.println("Start point location in " + start.quart() + " quarts");
        System.out.println("End point location in " + end.quart() + " quarts");

	}
}

Только он не в package, Проблема в том, что когда myPoint.class и myLine.class не упакованы в Geometry.jar все работает нормально (естественно с параметром -classpath), а вот когда они упакованы в Geometry.jar -classpath уже не помогает.

Заранее благодарен.
С уважением.
Проверить, там ли лежит Geometry.jar. Проверить его содержимое.
З.Ы. А с каких это пор названия пакетов с большой буквы писаться начали, кстати?
...
Рейтинг: 0 / 0
29.01.2007, 15:15:33
    #34290033
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Geometry.jar лежит в d:\Packages. (Т.е. полный путь: d:\Packages\Geometry.jar)
Единственное, чем я озадачен в данном случае, что в книге было сказано, что в архив классы следует помещать со структурой каталогов. Эту хитрую фразу я понял так, что классы следует скопировать в директорию и упаковывать за пределами этой диретории. Т.е. классы я кладу в D:\Packages\Geometry, затем поднимаюсь в D:\Packages и создаю архив. Т.е. содержимое архива: Geometry.jar: Geometry\myPoint.class, Geometry\myLine.class. Т.е. классы внутри каталога.
...
Рейтинг: 0 / 0
29.01.2007, 15:23:42
    #34290050
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В.В.Geometry.jar лежит в d:\Packages. (Т.е. полный путь: d:\Packages\Geometry.jar)
Единственное, чем я озадачен в данном случае, что в книге было сказано, что в архив классы следует помещать со структурой каталогов. Эту хитрую фразу я понял так, что классы следует скопировать в директорию и упаковывать за пределами этой диретории. Т.е. классы я кладу в D:\Packages\Geometry, затем поднимаюсь в D:\Packages и создаю архив. Т.е. содержимое архива: Geometry.jar: Geometry\myPoint.class, Geometry\myLine.class. Т.е. классы внутри каталога.
А в самих классах прописано package Geometry; ?
...
Рейтинг: 0 / 0
29.01.2007, 15:42:53
    #34290134
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Во всех, кроме Proba.class

Вот myPoint.java:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
 package  Geometry;



 public   class  myPoint
{

	  public  myPoint( double  xCoord,  double  yCoord)
	{
      x = xCoord;
	  y = yCoord;
	  label =  0 ;

	}

    public  myPoint( double  xCoord,  double  yCoord,  int  flag,  int  lab)
	{
       if  (flag== 1 )
      {
         x = xCoord;
	     y = yCoord;

          vect = Math.sqrt(x*x+y*y);
	      ang =  56 + 78 ;
          
		  label = lab;

      }
	  
	   else 
		{
	      x = xCoord;
	      y = yCoord;
          label =  0 ;
		}
	}





	 public  myPoint()
	{
	  x =  0 ;
	  y =  0 ;

     label =  0 ;
	}


	 public  myPoint( final  myPoint oldPoint)
	{
      x = oldPoint.x;
	  y = oldPoint.y;

       label =  0 ;
	}

     public   void  setX( double  inputX)
	{
	x = inputX;
	}

       public   void  setY( double  inputY)
	{
	y = inputY;
	}

       public   double  getX()
	{
	 return  x;
	}

    public   double  getY()
	{
	 return  y;
	}


      public   void  movePoint( double  xDelta,  double  yDelta)
	{
      x += xDelta;
	  y += yDelta;
	}


      public  myPoint movePoints( final  myPoint oldPoint,  double  xDelta,  double  yDelta)
	{
     
	 myPoint newPoint =  new  myPoint(oldPoint);
	 newPoint.x += xDelta;
     newPoint.y += yDelta;

		  return  newPoint;
     
	}



      public   double  distance( final  myPoint oldPoint)
	{
        return  Math.sqrt((x-oldPoint.x)*(x-oldPoint.x) + (y-oldPoint.x)*(y-oldPoint.x));
	}



    public   int  quart()
	{
	   
        if (x> 0  && y> 0 )
		  return   1 ;
		 
		  else   if  (x< 0  && y> 0 )
	          return   2 ;
          
				   else   if  (x< 0  && y< 0 )
                       return   3 ;
	             
					    else   if  (x> 0  && y< 0 )
                                return   4 ;
	               
							 else   return  (x== 0 . 0  || y ==  0 ) ?  5  : ( int )x;
                          
		 }


   public   void  CoordPol()
	{
        
       double  rad = Math.sqrt(x*x+y*y);
	   double  phi =  56 + 78 ;

        double  [] coords  = {rad, phi};
      
	   this .coordPol = coords;
	    label =  1 ;
 	 }



 public   double  [] getCoordPol_arr()
	{
     
     return  coordPol;
	}


 public   void  CoordPol( final  myPoint oldPoint)
	{
      vect = Math.sqrt(oldPoint.x*oldPoint.x+oldPoint.y*oldPoint.y);
	  ang =  56 + 78 ;
       label =  1 ;
	}

 public   double  getVect()
	{
      return  vect;
	}

 public   double  getAng()
	{
      return  ang;
	}

 public  String toString()
	{
      if  (label== 0 )
     {
		  return  "x = " +  Double .toString(x) + ",  " + "y =  " + y;
     }
     else   if  (label== 1 )
    {
          return  "x = " +  Double .toString(x) + ",  " + "y =  " + y + "      " + "vector = " +  Double .toString(vect) + ",  " + "angle =  " + ang;
    }
      else 
		{
           return  "vector = " +  Double .toString(vect) + ",  " + "angle =  " + ang;
		}


	}


 private   double  x;
 private   double  y;

 private   double  vect;
 private   double  ang;


 private   double  [] coordPol;

 private   int  label;

}


Вот myLine.java:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
 package  Geometry;

 public   class  myLine 
{
	


	 public  myLine( final  myPoint start,  final  myPoint end)
	{
       this .start =  new  myPoint(start);
       this .end =  new  myPoint(end);
	}



	 public  myLine( double  xStart,   double  yStart,  double  xEnd,   double  yEnd)
	{
	 start =  new  myPoint(xStart,yStart);
	 end =  new  myPoint(xEnd,yEnd);
	}


     double  length()
	{
      return  start.distance(end);
	}


	 int  [] locationmyLine(myPoint start, myPoint end)
	{
      int  [] endOfmyLine = {start.quart(), end.quart()};
	 
	  return  endOfmyLine;     
	}

  public  String toString()
	{
      return  "Start point: (" + start + ")" + "\nEnd point:(" + end + ")";
	}
    myPoint start;
    myPoint end;


}
...
Рейтинг: 0 / 0
29.01.2007, 17:47:35
    #34290683
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Сделал все у себя, откомпилил - работает.
З.Ы. Советую почитать соглашения об оформлении кода. Названия пакетов - с маленькой буквы, названия классов - с большой!
...
Рейтинг: 0 / 0
30.01.2007, 14:26:18
    #34292925
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
Вобщем, ошибку нашел. Надо было в -classpath указать, в том числе, и путь до самого класса Proba.

Всем огромное спасибо за помощь.
С уважением.
...
Рейтинг: 0 / 0
30.01.2007, 14:40:18
    #34293014
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В.В.Вобщем, ошибку нашел. Надо было в -classpath указать, в том числе, и путь до самого класса Proba.
Как раз для этого точку используют, чтобы запускать из каталога, в котором класс лежит... В общем, понятно :)
...
Рейтинг: 0 / 0
03.02.2007, 13:30:20
    #34304022
В.В.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
День добрый!
Вопрос вдогонку.
Если пакеты и *.jar подцепляются, практически, одинаково (т.е. в плане запуска класса, что с пакетом, что с jar) , то когда что лучше использовать?

Заранее спасибо.
С уважением.
...
Рейтинг: 0 / 0
03.02.2007, 14:08:08
    #34304058
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно подцепить jar?
В.В.День добрый!
Вопрос вдогонку.
Если пакеты и *.jar подцепляются, практически, одинаково (т.е. в плане запуска класса, что с пакетом, что с jar) , то когда что лучше использовать?

Заранее спасибо.
С уважением.
Jar запускается медленнее (классы еще распаковать надо), но удобнее - в случае с классами их может быть много, и надо копировать целые структуры каталогов, а Jar - всего один файл. К тому же у Jar есть удобная штука под названием манифест - куда могут прописываться названия требуемых библиотек, запускаемый класс (Main-class). То есть можно написать некое графическое приложение, прописать в манифесте главный класс, запускающий все это, прописать используемые библиотеки (на забыв кинуть их в тот же каталог), и потом запускать в Винде стандартным двойным кликом. Для юзеров - намного удобнее, чем разбираться с classpath, запускать бат-файл и разбираться в опциях командной строки.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно подцепить jar? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]