Java 环境搭建

2015-06-19 language

简单记录一下 Linux 下的 Java 环境搭建,以及使用方法。

简介

可以通过 rpm -qa | grep java 查看是否已经安装 java 包,CentOS 默认安装的是 openjdk,常用的 openjdkopenjdk-headlesstzdata-java 已经安装,通过 java -version 查看版本号。

将会将代码安装在 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el7_0.x86_64/jre/ 目录下。

可以删除 openjdk 然后安装 Sun,不太建议,安装 devel 包,含有 jar jarsigner javac javadoc javah javap 等软件。

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello! World!");
    }
}

文件名必须与类相同,即 HelloWorld.java ,通过 javac HelloWorld.java 编译,java HelloWorld 运行。

JAR 包

Java Archive File, JAR 包是 Java 的一种文档格式,实际上就是 ZIP 文件,唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,该文件是在生成 JAR 时自动创建。

当包含一个 jar 包时,如果不知道所包含的类,可以通过解压包查看。

Java 程序由若干个 .class 文件组成的,这些文件必须根据它们所属的包不同而分级分目录存放,运行前需要把所有用到的包的根目录指定给 CLASSPATH 环境变量或者 java 命令的 -cp 参数。

$ tree
$ jar -cvf hello.jar helloworld
$ jar -tvf hello.jar                 // 查看JAR包的详细信息
$ jar -xf hello.jar                  // 解压

在 eclipse 可以直接通过 export 打包。

很多 Java 内部函数在 java-x.x.x-openjdk-headless 中定义。

$ rpm -ql java-1.7.0-openjdk-headless-1.7.0.95-2.6.4.0.el7_2.x86_64 | grep -P '\.jar$' > /tmp/1
$ for i in `cat /tmp/1`; do ls -alh $i; done                                               # 部分文件是符号链接
$ vi /tmp/1                                                                                # 去除符号链接
$ for i in `cat /tmp/1`; do echo $i && jar -tvf $i | grep DriverManager; done              # 查看相应的接口

安装 Maven

在 CentOS 中也可以 yum install maven 安装,如果版本比较老,可以从 官网 下载二进制包,可以解压到任何目录;新建符号连接,方便升级 ln -s apache-maven-3.2.3 apache-maven

~/.bashrc 文件中添加环境变量,然后通过 source ~/.bashrc 更新:

export M2_HOME=/home/andy/Workspace/java/tools/apache-maven
PATH=$PATH:$M2_HOME/bin

通过执行 mvn -v 查看是否安装成功,此时会先是 Java 的版本号等信息。

配置

Linux 中的配置默认保存在 ~/.m2/settings.xml 文件中。

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
  <localRepository>/opt/maven/repository</localRepository>
  <offline>false</offline>
  <proxies>
    <!-- proxy
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->
  </proxies>

  <mirrors>
    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
      <id>maven-default-http-blocker</id>
      <mirrorOf>external:http:*</mirrorOf>
      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
      <url>http://0.0.0.0/</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>

  <profiles>
    <profile>
          <id>jdk-1.8</id>
          <activation>
            <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
          </activation>

          <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
          </properties>
    </profile>
  </profiles>
</settings>

Scala

可以从 Scala-Lang 上下载,一般是二进制包,例如 RedHat 可以通过 RPM 安装,安装完之后通过 scala -version 查看。编译需要通过 sbt 工具,可以从 Scala-sbt 上下载,解压到指定目录并添加到 PATH 环境变量中。

----- 查看版本
$ sbt -version

----- 测试运行
$ cat HelloScala.scala
object HelloScala extends App {
  println("Hello")
}
$ sbt run

运行会生成 compiler-bridge_2.12 包。

安装 Eclipse

另一个比较好用的开发环境是 IDEA

安装

在 CentOS 中,可以通过如下步骤安装。

  1. www.eclipse.org 下载最新的 Eclipse,通常为 eclipse-xxxx-linux-gtk-x86_64.tar.gz
  2. 解压到 /opt 目录下,su - && tar -xvzf eclipse-xxx-linux-gtk.tar.gz -C /opt && ln -s /usr/eclipse/eclipse /usr/bin/eclipse,此时可以在 Terminal 中通过 eclipse 命令启动。
  3. 添加文件 vi /usr/share/applications/eclipse-4.4.desktop,于是可在左上角找到 Eclipse 。
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse 4.4.1
Comment=Eclipse Luna
Exec=/usr/bin/eclipse
Icon=/opt/eclipse/icon.xpm
Categories=Application;Development;Java;IDE
Version=1.0
Type=Application
Terminal=0

maven 工程创建需要一个 groupid 和 artifactid,两者的组合需要全局唯一,一般 groupid 是包名,artifactid 为工程名 (会在 Eclipse 中展示)。

HelloWorld

可以通过如下步骤简单创建一个 Java 项目。

1. 新建 Java 项目

选择 "File → New → Project...",选择 "Java Project",便打开了 "New Java Project" 向导。在 "Project name" 中填入 "HelloWorld",直接点击 "Finish" 按钮。

2. 新建一个 Package

值得注意的是包名和工程名一般都是小写开头,而 Java 类名则是大写开头。选择 "File → New → Package",在 "New Java Package" 向导中的 Name 框中输入 "test",直接 finish。

3. 新建 HelloWorldApp 类

选择 "File → New → Class",在 "New Java Class" 向导中的 Name 框中输入 "HelloWorldApp",并且在 "public static void main(String[] args)" 选项前面打上勾;在 Source floder 中选择上步填写的项目。

4. 添加打印语句

在 main 中添加如下内容。

System.out.println("Hello World!");

5. 运行 Java 程序

按下 "Run → Run...",Eclipse 会弹出运行设置向导,选择 "Java Application"

其它

然后可以右健点击对应文件,"Export... → Runnable JAR file",在 Launch configuration 中选择对应的项目,并在 Library handling 中选择 Extract required libraries into generated JAR

接着通过 java -jar helloworld.jar 就可以运行。

安装 JDBC

在 CentOS 中可以通过 yum install mysql-connector-java 安装,此时会保存在 /usr/share/java/mysql-connector-java.jar ,如果要使用这个包需要包含全路径,可以设置 CLASSPATH 环境变量,或者:

java -classpath .:/usr/share/java/mysql-connector-java.jar GetConnection

在 Eclipse 中可通过 [右健] -> Properties -> Java Build Path -> Libraries -> Add External JARs

可以从 MySQL 官网下载 MySQL Connectors

Maven

在 eclipse 中设置 maven,Window -> Preference -> Maven -> {Installations, User Settings},配置文件可以统一使用集团的,可以设置全局以及用户的,此时会自动生成 repository 目录。

可以通过如下的方法在 Eclipse 中创建一个最简单的 Maven 工程,步骤如下 File -> New -> Project... -> Maven[Maven Project] -> Next... -> 选择 quickstart 即可。

然后点击运行,可以看到一个最简单的 Hello World 程序,如果出现 Missing artifact,修改后可以通过 [右键] -> Maven -> Update Project... 即可。

创建 mvn 工程,也可以执行如下命令创建一个 maven 工程,然后导入。

$ mvn archetype:generate -DgroupId=abc -DartifactId=hello \
    -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false