Запуск java в пакете из командной строки

21

Я прочитал ранее опубликованные вопросы. Некоторые расплывчаты, и никто не решил мою проблему, поэтому я вынужден снова спросить.

У меня есть два простых класса,

package One;
import One.Inner.MyFrame;
public class test
{
    public static void main(String args[])
    {
        MyFrame f= new MyFrame();
    }
}

И другой класс,

package One.Inner;
import java.awt.*;
import javax.swing.*;

public class MyFrame extends JFrame
{
    public MyFrame()
    {
        setPreferredSize(new Dimension(400,560));
        setVisible(true);
    }
}

Я в базовой папке «basic» в Windows cmd. Я компилирую с помощью

basic> javac *.java -d .

Создана папка и подпапка.

cd One
basic\One> java test

Это создает большой набор ошибок. Многие ответы направлены на то, чтобы указать полный путь, который не сработал. Мои классы находятся в One, поэтому указание, что использование -cp тоже не работает.

    
задан user2756339 17.10.2013 в 19:28
источник

4 ответа

36

Вы запустите его как:

java One.Test

... но из каталога root ( basic ), not из каталога One . Вы всегда указываете имя класса полностью .

О, и имена пакетов в Java должны быть в нижнем регистре, поэтому должны быть one и one.inner , а не One и One.Inner . Просто конвенция, но та, которую придерживаются почти все.

    
ответ дан Jon Skeet 17.10.2013 в 19:29
источник
  • Директория, из которой это должно быть сделано, действительно важна. Я получил это неправильно раньше. Я заметил. Я был под ложным впечатлением, что только встроенные пакеты javas должны быть небольшими. –  user2756339 17.10.2013 в 19:47
  • Есть ли способ запустить его из того же каталога? Например, указав рабочий каталог через параметр командной строки? Я много искал для этого, и все говорят: «Просто пойдите один dir up», но это действительно раздражает в некоторых сценариях. –  Haralan Dobrev 17.05.2014 в 01:55
  • О, вот оно: java -cp ../ one.Test. Я был уверен, что пробовал это раньше. –  Haralan Dobrev 17.05.2014 в 01:56
  • Да. В файле man для Java-приложения launcher java указано: «По умолчанию первым аргументом без опции является имя вызываемого класса. Должно использоваться полное имя класса». Я думаю, что они должны изменить это на «Должно быть использовано полное имя класса»! –  jdurston 25.10.2015 в 20:29
12

Если каталог:

basic\One

Запустите java из базового каталога пакета:

basic>java One.test or basic>One.test <optional arguments>

(в идеале пакет будет иметь строчный регистр и верхний регистр класса):

basic>java one.Test

Если вы получаете сообщения «не существует», команда java не может найти классы, на которые вы ссылались в своем классе. Вы можете указать на них с опцией -cp («.» Означает «здесь», и вы можете добавить столько мест, сколько хотите, разделенных «;» на Windows и «:» на Linux).

basic>java -cp . one.Test
or
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory  one.Test
    
ответ дан MattC 09.12.2014 в 00:41
источник
  • Пример с флагом -cp полезен. +1 –  binarysubstrate 26.12.2015 в 08:02
  • Спасибо, это полезно. –  Abhishek Tiwari 08.08.2016 в 07:08
2

Это связано с тем, что если вы объявляете пакет в своем java-файле, то компилятор JAVA полагает, что у вас такая же архитектура папок в вашей системе. В вашем случае компилятор Java ищет One как пакет, а затем test.class., Или, чтобы быть очень конкретным, просто загляните в свой .class-файл, вы увидите, какой путь он ищет. Пожалуйста, обратите внимание ниже. (Я в своем случае использую Hello and Tester)

Как вы видите путь на изображении, это Hello / Tester (пример моего примера), поэтому архитектура должна быть похожа на Hello- & gt; Tester.

И если у вас нет такой же архитектуры и вы хотите создать ее при компиляции, используйте команду javacp.     

ответ дан Simmant 07.09.2017 в 16:58
источник
1

при создании класса с пакетом, если вы хотите запустить его из cmd, вы должны создать каталог с таким же именем пакета, помещая в него .class, а затем вы можете легко запустить его, например, вы создали класс с именем " один "и этот класс в пакете с пакетом имен, вы должны запустить эти команды

1 javac one.java
после компиляции создан каталог с пакетом имен, после этого запустите эту команду
2 java pack.one
Примечание:
все это должно быть сделано в текущем рабочем каталоге, а имя «один» я выбрал здесь как имя файла и имя основного класса все мы знаем, что первое имя, используемое в первой команде, - это имя файла, а второе - имя основного класса

    
ответ дан javageek 08.11.2016 в 22:25
источник
  • Вы должны использовать форматирование, чтобы облегчить понимание вашего ответа. –  Nicolas Henneaux 08.11.2016 в 23:06