<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Проблемы компиляции java/c++ in Linux]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=8737&amp;type=atom" />
	<updated>2010-12-01T08:10:32Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=8737</id>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117842#p117842" />
			<content type="html"><![CDATA[<p>спасибо</p>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-12-01T08:10:32Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117842#p117842</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117788#p117788" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>и еще маленький вопрос..... <br />jar -cvf Main.jar .*class<br />так упаковывать можно?</p></blockquote></div><p>Можно. Только опять же, если классы не входят ни в какой пакет. Если классы в пакете, то нужно упаковывать каталог:<br /></p><div class="codebox"><pre><code>jar cvf Main.jar ru   //если текущим является /home/name/project/classes, и в котором находится ru/linuxforum/lion69
jar cvf Main.jar /home/name/project/classes/ru    //если использовать абсолютный путь</code></pre></div><p>Внутри архива создается каталог META-INF с файлом MANIFEST.MF<br />По умолчанию он выглядит так:<br /></p><div class="codebox"><pre><code>Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)</code></pre></div><p>Одно из самых интересных &quot;фич&quot; - можно указать в нем параметр Main-Class, для этого создаешь файл MyManifest.mf<br /></p><div class="codebox"><pre><code>Manifest-Version: 1.0
Created-By: 1.6.0_22 (Sun Microsystems Inc.)
Main-Class: ru.linuxforum.lion69.Main</code></pre></div><p>В конце файла обязательно должна быть пустая строка.<br />Для того, чтобы подсунуть его в jar архив:</p><div class="codebox"><pre><code>jar cvfm Main.jar  MyManifest.mf /home/name/project/classes/ru</code></pre></div><p>И теперь программу можно будет запускать так:<br /></p><div class="codebox"><pre><code>java -jar Main.jar</code></pre></div><div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>а если я захочу запустить одновременно в потоке компиляцию и запуск двох файлов... тогдна classpath может установить не ту что нада директорию...&nbsp; я прав?</p></blockquote></div><p>Можно ведь запускать с параметром -cp</p><div class="codebox"><pre><code>java -cp /home/name/project/classes ru.linuxforum.lion69.Main</code></pre></div><p>Или если через export, то вот так</p><div class="codebox"><pre><code>export CLASSPATH= $CLASSPATH:/home/name/project/classes</code></pre></div><p>Т.е. каталоги будут добавляться в переменную. Ничего страшного нет, после перезагрузки все очистится. Хотя лучше мне кажется использовать параметр -cp. Так как теоретически могут возникнуть проблемы при export.</p>]]></content>
			<author>
				<name><![CDATA[mycetophylax]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6380</uri>
			</author>
			<updated>2010-11-30T21:09:51Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117788#p117788</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117392#p117392" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>пишу на джаве.....<br />на ней пишу уже достаточно долго....</p></blockquote></div><p>Странно... Писали долго и до сих пор не слышали про CLASSPATH и packages?</p>]]></content>
			<author>
				<name><![CDATA[Hvzh]]></name>
			</author>
			<updated>2010-11-29T16:36:33Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117392#p117392</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117290#p117290" />
			<content type="html"><![CDATA[<p>пишу на джаве.....<br />на ней пишу уже достаточно долго....<br />но только сейчас заметил что в методе getRuntime().exec() можно задавать директорию.....<br />ваш мануал меня на это натолкнул)</p>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-11-29T10:10:04Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117290#p117290</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117158#p117158" />
			<content type="html"><![CDATA[<p>ок....<br />и еще <br /></p><div class="quotebox"><blockquote><p>а если я захочу запустить одновременно в потоке компиляцию и запуск двох файлов... тогдна classpath может установить не ту что нада директорию...&nbsp; я прав?</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-11-28T21:06:20Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117158#p117158</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117157#p117157" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>мдам.... мне очень редко кто так класно все обьясняет.....<br />большое списибо....<br />и еще маленький вопрос..... <br />jar -cvf Main.jar .*class<br />так упаковывать можно?</p></blockquote></div><p>Про JAR тоже отдельный большой вопрос. Мне через 5 часов на работу идти, спать надо. Так что только завтра после 18.00 московского времени.&nbsp; wink</p>]]></content>
			<author>
				<name><![CDATA[mycetophylax]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6380</uri>
			</author>
			<updated>2010-11-28T20:58:21Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117157#p117157</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117153#p117153" />
			<content type="html"><![CDATA[<p>мдам.... мне очень редко кто так класно все обьясняет.....<br />большое списибо....<br />и еще маленький вопрос..... <br />jar -cvf Main.jar .*class<br />так упаковывать можно?</p>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-11-28T20:55:44Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117153#p117153</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117136#p117136" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>в g++ можно через (-о) указать директорию куда будет помещет скомпиленій файл.... а есть что то такое в javac?</p></blockquote></div><p>Ага. Используй -d /путь/к/папке</p><div class="codebox"><pre><code>javac -cp /home/name/project -d /home/name/project/classes Main</code></pre></div><p>Но тогда и запускать придется уже так</p><div class="codebox"><pre><code>java -cp /home/name/project/classes ru.linuxforum.lion69.Main</code></pre></div>]]></content>
			<author>
				<name><![CDATA[mycetophylax]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6380</uri>
			</author>
			<updated>2010-11-28T20:36:21Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117136#p117136</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117132#p117132" />
			<content type="html"><![CDATA[<p>Для плавного перехода к пакетам цитирую себя<br /></p><div class="quotebox"><cite>mycetophylax пишет:</cite><blockquote><p>...приведу несколько для примера: System, Double, JFrame и т.д...</p></blockquote></div><p> Вообще-то правильнее было написать вот так:<br /></p><div class="quotebox"><blockquote><p>...приведу несколько для примера: java.lang.System, java.lang.Double, javax.swing.JFrame и т.д..</p></blockquote></div><p>Запись вида &quot;java.lang.System&quot; означает класс System из пакета java.lang. Грубо говоря, пакет - это набор классов. В основном пакеты используются для устранения конфликта имен, например, если несколько программистов назовут свои классы одинаково - &quot;Main&quot;.</p><p>Чтобы поместить класс в пакет, необходимо в первой строке написать:</p><div class="codebox"><pre><code>package ru.linuxforum.lion69;</code></pre></div><p>Если такой строчки в файле нет, то считается, что класс находится в <strong>пакете по умолчанию</strong><br />Sun рекомендуют для названия пакетов использовать доменное имя записанное наоборот.</p><p>Для примера напишу простейший класс Main (название оставлю твое).<br /></p><div class="codebox"><pre><code>package ru.linuxforum.lion69;

public class Main{
    public static void main(String[] args){
        System.out.println(&quot;Всем привет!!!&quot;);
    }
}</code></pre></div><p>Это файл нужно обязательно поместить в ru/linuxforum/lion69, т.е. в подкаталог, путь к которому совпадает с названием пакета:<br /></p><div class="codebox"><pre><code>ru.linuxforum.lion69
ru/linuxforum/lion69</code></pre></div><p>Т.е. если раньше твой файл лежал тут<br /></p><div class="codebox"><pre><code>/home/name/project/Main.java</code></pre></div><p>то после включения его в пакет, он должен располагаться так:<br /></p><div class="codebox"><pre><code>/home/name/project/ru/linuxforum/lion69/Main.java</code></pre></div><p>Теперь для компиляции выполняется следующая команда, если текущим является каталог, в котором лежит Main.java (/home/name/project/ru/linuxforum/lion69):</p><div class="codebox"><pre><code>javac -cp /home/name/project Main.java</code></pre></div><p>Да-да, именно так wink. Компилятору тоже нужно указывать CLASSPATH, хотя в данном примере в этом нет необходимости. Но чем раньше приучишь себя к этому, тем лучше и легче будет в будущем.</p><p>Запуск<br /></p><div class="codebox"><pre><code>java -cp /home/name/project ru.linuxforum.lion69.Main</code></pre></div><p>Теперь необходимо передавать полное имя класса, вместе с пакетом.</p><p>P.S. Ты еще не передумал компилировать все &quot;ручками?&quot;&nbsp; <img src="https://linuxforum.ru/img/smilies/ag.gif" alt="ag" /></p>]]></content>
			<author>
				<name><![CDATA[mycetophylax]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6380</uri>
			</author>
			<updated>2010-11-28T20:33:31Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117132#p117132</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117113#p117113" />
			<content type="html"><![CDATA[<p>а почему вы против gcj?<br />она вроде даже быстрее мне показалась</p><p>и еще вопрос... а если я захочу запусти одновременно в потоке компиляцию и запуск двох файлов... тогдна classpath может установить не ту что нада директорию...</p><p>в g++ можно через (-о) указать директорию куда будет помещет скомпиленій файл.... а есть что то такое в javac?</p>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-11-28T19:52:45Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117113#p117113</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117107#p117107" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>java /home/name/project/Main - по идее нужно запускать так(потому как указівать явно разширение запрещает), Но оно я так понимаю видит не файл Маin.class</p></blockquote></div><p>Все дело в том, что ищется <strong>не файл</strong> Main.class, а <strong>класс</strong> Main.<br />Поиском классов занимаются <strong>загрузчики классов</strong> (ClassLoaders). Всего их три штуки (это не совсем верно, т.к. на самом деле можно написать свой собственный загрузчик, но чтобы сильно не усложнять и не забивать мозги пока не нужными сведениями про них я больше ничего писать не буду):<br />&nbsp; &nbsp; &nbsp;1. Bootstrap classloader - базовый загрузчик (обычно переводят так).<br />&nbsp; &nbsp; &nbsp;2. Extension classloader - загрузчик расширений.<br />&nbsp; &nbsp; &nbsp;3. Application classloader (часто называют system classloader, но мне почему-то больше нравится первый вариант, т.к. он &quot;загружает приложения&quot; wink).</p><p>Bootstrap classloader ищет и загружает &quot;стандартные&quot; классы (приведу несколько для примера: System, Double, JFrame и т.д.) из /jre/lib. Extension classloader ищет классы расширений в jre/lib/ext.<br />И, наконец, интересующий нас в данный момент Application classloader. Он ищет классы там, куда указывает переменная CLASSPATH. Т.е. именно он загружает написанные тобой классы. По умолчанию CLASSPATH=&quot;.&quot;, т.е. текущая директория. Поэтому запуск<br /></p><div class="codebox"><pre><code>java /home/name/project/Main</code></pre></div><p>и выдает ошибку<br /></p><div class="codebox"><pre><code>Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: /home/name/project/Main (wrong name: Main)</code></pre></div><p>Для того, чтобы указать, где искать классы можно установить значение переменной CLASSPATH<br /></p><div class="codebox"><pre><code>export CLASSPATH=/home/name/project</code></pre></div><p>А после этого спокойно запускать<br /></p><div class="codebox"><pre><code>java Main</code></pre></div><br /><p>Или передать параметр при запуске:<br /></p><div class="codebox"><pre><code>java -classpath /home/name/project Main
короткая запись
java -cp /home/name/project Main</code></pre></div><p>P.S. Сработает, только если твой класс находится в пакете по-умолчанию. Про пакеты скоро будет.</p><div class="quotebox"><cite>lion69 пишет:</cite><blockquote><p>я вот нашет команду gcj - и думаю ее использовать</p></blockquote></div><p>Не стоит. Используй sunовскую java.</p>]]></content>
			<author>
				<name><![CDATA[mycetophylax]]></name>
				<uri>https://linuxforum.ru/profile.php?id=6380</uri>
			</author>
			<updated>2010-11-28T19:23:04Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117107#p117107</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117106#p117106" />
			<content type="html"><![CDATA[<p>я вот нашет команду gcj - и думаю ее использовать</p>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-11-28T19:20:41Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117106#p117106</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117103#p117103" />
			<content type="html"><![CDATA[<p><strong>lion69</strong>, <br />Тогда прав <strong>mycetophylax</strong>, читайте про пакеты и CLASSPATH</p>]]></content>
			<author>
				<name><![CDATA[Hvzh]]></name>
			</author>
			<updated>2010-11-28T18:50:27Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117103#p117103</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117102#p117102" />
			<content type="html"><![CDATA[<p><strong>Hvzh</strong>, <br />нет... код джавы я и так пишу в IDE(вот только не знаю чем так всем нравится еклипс... по моему он более глючній чем нетбинс (имхо&nbsp; конечно))... <br />и я сос воего кода через функции линукса компилю код...(не спрашивайте зачем... )</p>]]></content>
			<author>
				<name><![CDATA[lion69]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11424</uri>
			</author>
			<updated>2010-11-28T18:45:11Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117102#p117102</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Проблемы компиляции java/c++ in Linux]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=117100#p117100" />
			<content type="html"><![CDATA[<p><strong>lion69</strong>, <br />А не проще поставить какой-либо IDE типа Eclipse и не мучиться?</p>]]></content>
			<author>
				<name><![CDATA[Hvzh]]></name>
			</author>
			<updated>2010-11-28T18:39:29Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=117100#p117100</id>
		</entry>
</feed>
