質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

726閲覧

mac os Javaコンパイル、実行について教えてください

beginner..

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/05/03 00:11

編集2020/05/03 00:33

現在Javaを勉強しているのですが、
javacやjavaコマンドの使い方がいまいちわかりません。

教えていただきたいこと

1, パッケージ分割をする際のディレクトリ構造について(または最低限のディレクトリ構造ルール)
2, javac、javaコマンドの使い方について
です。

ディレクトリツリー、ファイル内容は以下のようになっています。

samplejava ├ src │ └ sampleapp │ ├ logics │ │ └ Logics.java │ └ main │ └ Main.java └ bin

Java

1//Main.java 2package sampleapp.main; 3import sampleapp.logics. *; 4 5public class Main{ 6 public static void main(String[] args){ 7 8 System.out.println("Hello Java"); 9 10 int result = Logics.calc(2, 5); 11 System.out.println(result); 12 13 } 14} 15

Java

1//Logics.java 2package sampleapp.logics; 3 4public class Logics{ 5 6 public static int calc(int a, int b){ 7 return a * b; 8 } 9 10} 11

以下のコマンドではエラーが出るのですが、

//javacコマンド xxxx@xxx main % javac Main.java
//エラー結果 xxxx@xxx main % javac Main.java Main.java:2: エラー: パッケージsampleapp.logicsは存在しません import sampleapp.logics. *; ^ Main.java:9: エラー: シンボルを見つけられません int result = Logics.calc(2, 5); ^ シンボル: 変数 Logics 場所: クラス Main エラー2個

調べて拾ったこちらのコマンドではしっかりコンパイルしてくれます。

//javacコマンド xxxx@xxx samplejava % javac -sourcepath src -d bin src/sampleapp/main/Main.java

また、実行の際も以下のコマンドでエラーなく実行してくれました。

//javaコマンド xxxx@xxx samplejava % java -cp bin sampleapp.main.Main
//実行結果 Hello Java 10

失敗例と成功例の違いですが、
まず、実行時のディレクトリが違うのはわかります。(なぜmainディレクトリではダメなのかは理解していません)
それと、コマンドのオプションが失敗例では記述していないのもわかりますが、なぜこの記述じゃないとダメなのかは理解していません。

それと、ターミナルの場合、毎回以下のようなコードでコンパイル、実行をしないといけないのでしょうか?

//javacコマンド xxxx@xxx samplejava % javac -sourcepath src -d bin src/sampleapp/main/Main.java //javaコマンド xxxx@xxx samplejava % java -cp bin sampleapp.main.Main

色々と調べているのですが、中々理解できる内容がなく困っています。
何を聞けばいいのかもいまいち理解していない状態ですので、修正等あれば遠慮なくコメントいただけたらと思います。

ご回答よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/05/03 00:14

タグにあるようにeclipseならわざわざコマンドから実行しなくても動かせるのですけど、あえてコマンド実行しようとしているのはどういう経緯・目的でしょうか。
m.ts10806

2020/05/03 00:15

あと、細かいのですけど、マークダウンの冒頭はファイル名ではなく「言語名」を書く場所ですし 「ディレクトリ」もスペル間違っています。
beginner..

2020/05/03 00:23

ご回答ありがとうございます。 Eclipseも使っているのですが、実際にターミナルでどのように動くのかイメージをしたかったのであえてコマンドで実行しようと思いました。 マークダウンの冒頭ファイル名ですが、使い方が分からずファイル名を書いてしまいました。 訂正しておきます。 スペル間違い失礼しました。
Zuishin

2020/05/03 00:36

javac --help java --help 上記二つを実行してまずそれを読んでみてください。 そうすれば何を実行しているのかわかります。
beginner..

2020/05/03 00:41

ご回答ありがとうございます。 上記を実行してまずは読んでみます。
beginner..

2020/05/03 01:00

-d : 生成されたクラス・ファイルを格納する位置を指定する -sourcepath : 入力ソース・ファイルを検索する位置を指定するコマンドみたいなので、 「xxxx@xxx samplejava % javac -sourcepath src -d bin src/sampleapp/main/Main.java」を 「xxxx@xxx samplejava % javac -d bin(フォルダを指定) -sourcepath src/sampleapp/main/Main.java(入力ソースを指定)」のようにしたいのですが、「エラー: ソース・ファイルがありません」というエラーがでました。 なぜエラーが出るのでしょうか?
Zuishin

2020/05/03 01:10

「xxxx@xxx samplejava % javac -d bin(フォルダを指定) -sourcepath src src/sampleapp/main/Main.java(入力ソースを指定)」なら大丈夫じゃないでしょうか。 -sourcepath の後に続く src が -sourcepath の値です。これが無いので次に続く src/sampleapp/main/Main.java が -sourcepath の値と認識され、その結果、ソースファイルの指定が無くなっています。
beginner..

2020/05/03 01:17 編集

src が -sourcepath の値ですか... もっと-sourcepathについて調べてみたいと思います。 xxxx@xxx samplejava % javac -d bin(フォルダを指定) -sourcepath src src/sampleapp/main/Main.java(入力ソースを指定)」でコンパイルすることができました。 また、-sourcepathについて理解することができました。 ありがとうございます。
Zuishin

2020/05/03 01:25

javac --help を実行すると、最初の行に > 使用方法: javac <options> <source files> って書かれていますよね? つまり javac の後にオプション(複数可)を書き、その後にソースファイル(複数可)を書くという使用法です。 この最後の「ソースファイル」がオプションに取られて無くなっていたわけです。 また次のように書かれています。 > --source-path <path>, -sourcepath <path> これは --source-path(または -sourcepath) の次に path を書けという意味です。この path が無かったのでファイル名を奪ってしまいました。 この場合の path というのは、絶対パスまたは相対パスのどちらでも構いません。カレントディレクトリが samplejava なので、相対パスでその一つ下の src ディレクトリを指定しています。
beginner..

2020/05/03 01:55

そういうことだったのですね。 javac <options> <source files>の <options>は -sourcepath <path> 、つまり今回の場合は -sourcepath src を表しており、 最初のエラーが出たコマンドは <path>が「src/sampleapp/main/Main.java」を表していたため javac <options> <source files>の <source files>が指定されていない状態だった。 一つずつ噛み砕いていけばたいして難しくなかったですが、 一人では理解できなかったです。 ご丁寧に教えていただき、ありがとうございました。
Zuishin

2020/05/03 02:14

それで、結局質問の要点は何になりますか? ターミナルでコンパイルするのに打ち込むコマンドが長すぎるがどうすれば良いのかということであれば、通常は Gradle や Ant を使います。Eclipse もそれを使っているはずです。
beginner..

2020/05/03 03:03

はい、ターミナルのコマンドを打ち込む時、毎回上記のようなjavac、javaコマンドが必要であればそれだけで良いのですが、通常Zuishinさんが仰られたようにGrableやAntを使うべきであれば、どの様な機能を使えば良いのかお聞きしたかったです。 一度GrableやAntを調べてみます。
guest

回答1

0

自己解決

まだ完璧に使いこなせないですが、学習が進むにつれてなんとなく分かってきたので、一応解決しました。
ご回答頂いた方ありがとうございました。

投稿2020/06/07 05:21

beginner..

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問