

Javaで、Mavenプロジェクトに入っていないような単品のプログラムに対して、  
外部のライブラリをいい感じに追加する方法ってありますか？

例えば、以下のように外部ライブラリを使うプログラムで、

[code]

    import java.io.*;
    import org.apache.commons.csv.*;
    
    public class Main{
        public static void main(String[] args){
            try{
                Reader fr = new FileReader("ppap.csv");
                Iterable<CSVRecord> records = CSVFormat.RFC4180.withHeader().parse(fr);
    
                for(CSVRecord rec: records){
                System.out.println(rec.get("a"));
                }
            }catch(IOException e){}
        }
    }
    
[/code]

今はコンパイルを通すため、.jarファイルを手動でダウンロードしています。  
コンパイル時・起動時も手動で -classpath を指定しています。

これが面倒なのですが、みなさんはどんな方法を使っていますか？  
よろしくお願いいたします。


CC BY-SA 3.0
2017-12-02T07:56:18.050
39978
2017-12-02T08:24:48.720
26110
question
java maven
Javaで単品のプログラムの依存性をpipみたいに管理したい


Javaのプロジェクトなら[Maven](http://maven.apache.org)や[Gradle](http://gradle.org)でプロジェクトの依存管理が出来ます。このシステムを利用すると、フォルダー構成が固定になりますので自由度が少しなくなりますが、簡単に依存を追加したり、更新したり出来ますので便利です。

Mavenをインストールしましたら、コマンドから`mvn
archetype:generate`を実行し、パッケージ名とJarファイル名を入力すればMavenの設定ファイル（pom.xml)とフォルダー構成が作成されます。（Windowsだとエンターキーをもう一度押す必要ある場合があります。）

[code]

    Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
    1: 1.0-alpha-1
    2: 1.0-alpha-2
    3: 1.0-alpha-3
    4: 1.0-alpha-4
    5: 1.0
    6: 1.1
    Choose a number: 6: Define value for property 'groupId': com.example
    Define value for property 'artifactId': hogehoge-app
    Define value for property 'version' 1.0-SNAPSHOT: :
    Define value for property 'package' com.example: :
    Confirm properties configuration:
    groupId: com.example
    artifactId: hogehoge-app
    version: 1.0-SNAPSHOT
    package: com.example
    Y: : y
    
[/code]

その後は`mvn test`で単体テストの実行や`mvn package`でJarファイルを作成する事が出来ます。`package`したら`mvn
exec:java
-Dexec.mainClass=com.example.App`を実行すればすべての依存がクラスパスに追加してメインクラスを実行されます。

依存を追加するのに[search.maven.org](http://search.maven.org)から検索し、詳細画面に出る`<dependency>`のXMLをpom.xmlファイルの`<dependencies>`の中に追加するだけです。


CC BY-SA 3.0
2017-12-02T08:24:48.720
39979
2017-12-02T08:24:48.720
26450
39978
answer