图片 9

无IDE下编译和运行Java的方法

前几日 Java subreddit 出现了一篇”在并未有IDE的情景下编写翻译Java包”
的帖子,那么些帖子抛出了这么二个主题素材,“是不是存在一个下令能够编写翻译一组处于同一文件夹下独立包内的java文件的主意(那叫做bin),同一时候如何运营新的类公事呢?”
它的建议者 kylolink解释说,“当自个儿起来信任Eclipse来编排代码时就初叶顾忌未有Eclipse时和睦该怎么写代码了。”
笔者看过很频繁这类难题,事实上,那促使自个儿(近期一度七年了)发了一篇文章: GPS系统和IDE:终究是好也许坏? 作者爱好强盛的现代化的Java的集成开垦情状(IDE),因为它使得笔者的编制程序越发安闲自得,但精通什么营造和平运动转轻易的Java示例也有必不可缺的,那篇小说主要就是珍视于如何产生这么些的。

在本篇小说中,将展示怎么着使用 Maven 来创立三个 Java 项目,导入其到Eclipse
IDE,并打包 Java 项目到二个 JA途锐 文件。

图片 1

支付意况介绍

IDE: MyEclipse
10.7
jdk: 1.6
maven:apache-maven-3.2.5
核心条件一旦下边这一个就行.

确保Maven安装正确.

本身博客中一篇随笔 通过简单的测验学习Java,在那之中写了作者心爱得舍不得撒手用八个简洁明了的文件编辑器和命令行工具来编排况兼运营简单的次序。将来自个儿有个很棒的主见,是有关笔者最喜悦的java
ide的,即开始的一段时期决定利用IDE的实惠是为了确定保障“花费”。在大好多实际应用程序中,不容置疑IDE的开垦是值得的。但是,对于最简易的示范应用程序并非总是如此。那篇小说的盈余部分显得了在未曾境遇那些情状的前提下是哪些营造和周转Java代码的。

1. 从 Maven 模板创造叁个门类

在终端(* UNIX或Mac)或命令提示符(Windows)中,浏览到要开创 Java
项指标文件夹。键入以下命令:

mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name}-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

那告诉 Maven 来从 maven-archetype-quickstart 模板创立 Java
项目。借使马虎 archetypeArtifactId 选项,多少个高大的 Maven
模板列表将列出。

比方,这里的做事目录是:E:WorkSpaceStudy,实行命令进程时间恐怕比较久,看个人的互连网景况。

E:WorkSpaceStudy>mvn archetype:generate -DgroupId=com.gp6 -DartifactId=MavenTest
or -DarchetypeArtifactId=maven -archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.4:generate (default-cli) > generate-sources
@ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.4:generate (default-cli) < generate-sources
@ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.4:generate (default-cli) @ standalone-pom --
-
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------------
---
[INFO] Using following parameters for creating project from Old (1.x) Archetype:
 maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------------
---
[INFO] Parameter: basedir, Value: E:WorkSpaceStudy
[INFO] Parameter: package, Value: com.yiibai
[INFO] Parameter: groupId, Value: com.yiibai
[INFO] Parameter: artifactId, Value: MavenTest
[INFO] Parameter: packageName, Value: com.yiibai
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: E:WorkSpaceStudyMavenTest
r
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 23.166 s
[INFO] Finished at: 2015-10-27T11:03:48+08:00
[INFO] Final Memory: 17M/114M
[INFO] ------------------------------------------------------------------------

在上述情状下,四个新的Java项目命名 “MavenTest”,
而整个项目标目录结构会活动创立。

注意
有少数客商说 mvn archetype:generate 命令没能生成项目布局。
如果你有别的相像的题目,不用顾忌,只需跳过此步骤,手动创制文件夹,请参阅上面的品种协会。

创建和平运动作Java代码

2.Maven目录布局

利用 mvn archetype:generate + maven-archetype-quickstart 模板,
以下项目标目录构造被创建。

MavenTest
   |-src
   |---main
   |-----java
   |-------com
   |---------gp6   
   |-----------App.java
   |---test|-----java
   |-------com
   |---------gp6
   |-----------AppTest.java
   |-pom.xml

全部的源代码放在文件夹 /src/main/java/, 全体的单元测验代码放入/src/test/java/.

叠合的二个正规的 pom.xml 被扭转。那几个POM文件相近于 Ant build.xml
文件,它描述了全部项目标音信,一切从目录构造,项指标插件,项目信赖

为了对那篇小说举行更具体的商讨,作者将采取部分特别容易的Java类,在同二个包中通过互相相关的三结合或三回九转(不在 未命名的包中)来调用dustin.examples。那八个在第2个类在此之前是未曾 main 函数的,直到 Main.java 才有 main 函数为了在平昔不IDE的情景下运维示例。八个类的代码清单如下。

3. Eclipse IDE

为了使它成为贰个 Eclipse 项目,在极限步向到 “MavenTest”
项目,键入以下命令:

E:WorkSpaceStudyMavenTest>mvn eclipse:eclipse

[INFO] Using Eclipse Workspace: null
[INFO] Adding default classpath container: org.eclipse.jdt.launching.JRE_CONTAIN
ER
[INFO] Not writing settings - defaults suffice
[INFO] Wrote Eclipse project for "MavenTest" to E:WorkSpaceStudyMavenTest.
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12.104 s
[INFO] Finished at: 2017-05-03T15:13:59+08:00
[INFO] Final Memory: 15M/224M
[INFO] ------------------------------------------------------------------------

实施以上命令后,它自动下载更新相关能源和配置新闻(必要拭目以俟一段时间),并发生Eclipse IDE所必要的富有品种文件。要导入项目到Eclipse IDE中,选取 “File
-> Import… -> General->Existing Maven Projects”

品种导入到 Eclipse IDE中。

图片 2

目录布局

Parent.java

4. 更新POM

默许的 pom.xml 太轻松了,非常多时候,你供给加上编写翻译器插件来报告 Maven
使用哪个 JDK 版本是用来编写翻译项目

 <build>
      <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
          </plugin>
      </plugins>
  </build>

从更新JUnit 3.8.1到新型的 4.11。

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>
package dustin.examples;

public class Parent
{
   @Override
   public String toString()
   {
      return "I'm the Parent.";
   }
}
Maven 坐标

上面的XML代码片段被叫作“Maven坐标”,假诺您需求 JUnit 的
jar,你要求找寻其对应的 Maven
坐标。它适用于具备别的的依赖,如Spring,Hibernate,Apache 普通的等.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.gp6</groupId>
  <artifactId>MavenTest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MavenTest</name>
  <url>http://maven.apache.org</url>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
      <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
          </plugin>
      </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

在极端,再度发出肖似的指令 mvn eclipse:eclipse
,Maven将从Maven宗旨积攒库下载插件项目信任关系(JUnit),它会自动保存到你的本地商旅。

Child.java

5. 更新职业逻辑

测验驱动开拓(TDD),先更新单元测量检验,以保险应用程序(应用程式)对象有二个主意来生成包涵适逢其会三拾八人字母表的头一无二密钥。

  • AppTest.java

package com.gp6;

import junit.framework.TestCase;

import org.junit.Assert;
import org.junit.Test;

/**
 * Unit test for simple App.
 */
public class AppTest extends TestCase{


    @Test
    public void testLengthOfTheUniqueKey() {

        App obj = new App();
        Assert.assertEquals(36, obj.test().length());

    }
}
  • App.java

package com.gp6;

import java.util.UUID;

public class App {

    public static void main( String[] args ){
        App obj = new App();
        System.out.println("Unique ID : " + obj.test());
    }

    public String test(){
        String id = UUID.randomUUID().toString();
        return id;
    }
}
package dustin.examples;

public class Child extends Parent
{
   @Override
   public String toString()
   {
      return "I'm the Child.";
   }
}
6. Maven 打包

将运用Maven那些项目,并出口编写翻译成一个 “jar” 的公文。 请参照他事他说加以考查 pom.xml
文件,包成分定义应该包应该出口什么。

在终极输入 mvn package :

E:WorkSpaceStudyMavenTest> mvn package

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.gp6.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.083 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ MavenTest ---
[INFO] Building jar: E:WorkSpaceStudyMavenTesttargetMavenTest-1.0-SNAPSHOT
jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16.237 s
[INFO] Finished at: 2017-05-03T16:21:31+08:00
[INFO] Final Memory: 14M/217M
[INFO] ------------------------------------------------------------------------

它编写翻译,运营单元测量检验并封装项目成一个 jar 文件,并把它身处 project/target
文件夹。假使出错:E逍客RO中华V: Unable to locate the Javac Compiler in:,
C:Program Files (x86)Javajre6..libtools.jar,Please ensure you
are using JDK 1.4 or above and,not a JRE (the com.sun.tools.javac.Main
class is required)…

####### 7. 示例

从类型的 jar 文件运维应用程序示例

E:WorkSpaceStudyMavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 94e5fd1a-c038-415f-a8ed-7fc58c397369

E:WorkSpaceStudyMavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 48df568a-4b4b-4964-b767-664e206ca4b5

E:WorkSpaceStudyMavenTest>java -cp target/MavenTest-1.0-SNAPSHOT.jar com.gp6.App
Unique ID : 4ac9156c-2e4a-45f4-8644-0707ae28d5a6

Main.java

package dustin.examples;

import static java.lang.System.out;

public class Main
{
   private final Parent parent = new Parent();
   private final Child child = new Child();

   public static void main(final String[] arguments)
   {
      final Main instance = new Main();
      out.println(instance.parent);
      out.println(instance.child);
   }
}

接下去展现了目录构造与那么些类的 .java 源文件。截图展现源文件的目录档期的顺序布局代表了包名(dustin/examples 源自包 dustin.examples卡塔尔国和该子目录下被可以称作package-reflecting的目录档案的次序构造 src。笔者还创设了 classes 子目录(当前为空)用于置放编写翻译后文件 .class 文件,因为 javac 在目录荒诞不经的动静下不会成立该目录。

用javac创设和平运动行java

无论是使用哪个种类艺术符合规律地创设Java代码(Ant, Maven, Gradle, 或许IDE),笔者信赖审慎的做法是,起码掌握什么行使 javac来创设Java代码。Oracle/Sun的拥护者们选取 javac 命令行工具的大旨项来运转, javac
-help 也得以运作 javac -help
-X来查阅别的的恢弘选项。如何利用那几个接纳的更加多细节能够在 Windows 或然 Unix/Linux的javac的文书档案工具查看。

当步向 javac
文书档案 时, -sourcepath 选项可以被用来表示源文件存在的路线。在地点所表现的目录架构中,如果本身在运转 C:javaexamplesjavacAndJava 目录的 javac 命令,这将代表会要求如此的一声令下: javac
-sourcepath src srcdustinexamples*.java。下一张截图呈现了结果。

图片 3

因为大家从没点名 .class 文件的指标目录,在私下认可情状下它们被停放在同七个目录下被编写翻译的 .java 源文件。大家得以应用 -d 选项来改正这种处境。大家未来能够运作的授命,举个例子 javac
-sourcepath src -d classes
srcdustinexamples*.java。如前所述,钦定指标目录(classes卡塔尔国必需是存在的。那样,命令将会在底下的截图钦点的目录下定位.class文件。

图片 4

用Java源文件编写翻译成适当的 .class 文件在内定的目录中,大家明天得以运作Java应用程序运维命令行工具 java。那只是是透过by java
-help 所示的一声令下也许是 java工具页 和.class 文件的 -classpath 所钦赐的地点(或 -cp卡塔尔(قطر‎选项。使用二种办法来钦命 classes目录以便用于找到 .class 文件,接下去的截图注明了那一点。最终五个参数是一点一滴合格的(整个Java包)类名,它有贰个 main 函数来进行。上边包车型客车截图展现了java
-cp classes dustin.examples.Main 和java -classpath classes
dustin.examples.Main的一声令下。

图片 5

塑造和平运动作Ant

对此最简便的Java应用程序, javac and java 使用起来超级轻便,它们用于营造并实施应用程序就各自证实了那或多或少。应用程序会微微复杂一点(如代码中存在多少个包/目录或更头眼昏花的正视于第三方库和框架的类路线),但这种措施十二分难用。 Apache
Ant 是最古老的“三大人物”,它是被用于看不完的应用程序铺排的Java创设筑工程具。正如笔者谈谈过 从前的一篇博客,一个功底的Ant塑造文件相当轻便被成立,极其是只要都始于二个模板就像本身在 那篇作品中牵线的同出一辙。

接下去的代码是Ant的 build.xml 文件的,它将 .java 文件
编写翻译成 .class文件然后运维 dustin.examples.Main 类就像是上边的 javac 和 java相通。

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="BuildingSansIDE" default="run" basedir=".">
   <description>Building Simple Java Applications Without An IDE</description>

   <target name="compile"
           description="Compile the Java code.">
      <javac srcdir="src"
             destdir="classes"
             debug="true"
      includeantruntime="false" />
   </target>

   <target name="run" depends="compile"
           description="Run the Java application.">
      <java classname="dustin.examples.Main" fork="true">
         <classpath>
           <pathelement path="classes"/>
         </classpath>
      </java>
   </target>
</project>

自家从没接收Ant也不曾包蕴平常所用的艺术(举例 “clean” 和
“javadoc”),笔者动用的是 javac和 java来使例子尽只怕的归纳。请介意本人使用了”debug”来给javac
Ant
任务设置”true”;因为那不是Ant的默许情势而是javac的暗许格局。的确,Ant的 javac
task 和 java task与 javac and java的命令工具十分相似。

因为作者期望利用暗中同意名称Ant来营造文件的时候不显式钦命(build.xml),因为本身提供“运营”的目的,创设文件的“默许形式”,因为“编写翻译”作为一个依据包蕴“运维”的对象,此外Ant是本身的条件路线,小编所须要做的是在命令行上让Ant来编译运行目录下的“ant”类型的 build.xml文件示例,下图就证实了这点。

图片 6

即便本人自己要作为范例信守准则了用Ant编写翻译和平运动转二个简易的Java应用程序,日常本人只用Ant举行编写翻译相同的时候用java来运维(只怕一旦classpath极度复杂时就应用 java脚本来试行)。

用Maven来搭建和周转

虽说Ant是第叁个主流的Java营造筑工程具, Apache
Maven 最后取得了成功在超级大程度上要感激它利用的构造是比照规矩同一时候也扶助广大的库。现代码和扭转的 标准目录构造对象一致时,Maven非常轻松选拔。很缺憾,小编的例证不依照这一个目录结构,但Maven允许笔者 覆盖暗中认可的目录结构。上面包车型客车Maven
POM文件覆盖了源代码和目的目录以至提供了一个Maven构建所需的蝇头成分,那个时候Maven的版本是Maven
3.2.1。

pom.xml

<project>
   <modelVersion>4.0.0</modelVersion>
   <groupId>dustin.examples</groupId>
   <artifactId>CompilingAndRunningWithoutIDE</artifactId>
   <version>1</version>

   <build>
      <defaultGoal>compile</defaultGoal>
      <sourceDirectory>src</sourceDirectory>
      <outputDirectory>classes</outputDirectory>
      <finalName>${project.artifactId}-${project.version}</finalName>
   </build>
</project>

因为地点的 pom.xml 文件钦点了一个“compile”的“defaultGoal”, pom.xml 是默肯定义的POM文件,用试行器(mvn)来搜索,因为Maven安装的 bin 文件夹在自己的path情况变量中,作者只须要周转“mvn”来编写翻译 .class 文件,那在下张截图中校会显得。

图片 7

自家也能够用Maven的 mvn exec:java
-Dexec.mainClass=dustin.examples.Main命令来运维编写翻译后的应用程序,下图能够展现。

图片 8

与Ant同样,小编经常不采取Maven运维简单的Java应用程序,而是用 java 运营编写翻译后的代码(大概应用脚本直接调用 java 的classpath路径)。

用Gradle营造和平运动转

Gradle 是新型,最流行和最时髦的三大主流Java营造筑工程具之一。小编不经常会困惑时髦东西的本色,不过作者意识了有广大事物 举例Gradle (用Groovy编写的XML,
内置Ant支持和Ivy协助,配置依据常规相当轻便被隐蔽,Maven存款和储蓄库扶助等)。下一个事例显示了一个Gradle构建文件,它可用来编写翻译和平运动作一个轻便易行的应用程序,这里最首要浮现一下示范代码。它整顿自己在博客 轻松Gradle
Java插件定义的例子。

build.gradle

apply plugin: 'java'
apply plugin: 'application'

// Redefine where Gradle should expect Java source files (*.java)
sourceSets {
    main {
        java {
            srcDirs 'src'
        }
    }
}

// Redefine where .class files are written
sourceSets.main.output.classesDir = file("classes")

// Specify main class to be executed
mainClassName = "dustin.examples.Main"

defaultTasks 'compileJava', 'run'

前两行 build.gradle 文件钦赐 Java plugin 和 Application
plugin的应用程序,它将过多效应自动创设。“sourceSets” 和
“sourceSets.main.output.classesDir”的概念允许覆盖Gradle’s Java
插件各自的Java源代码和编写翻译文件类的默许目录。“mainClassName”分明了规范类应该作为应用程序的一局地插件运营。“defaultTasks”钦点要运营的天职,只需在命令行键入:‘compileJava’是二个正规的提供任务的Java插件,‘run’是三个正式的提供职责的应用程序的插件。因为笔者称营造文件为 build.gradle ,因为本身钦赐私下认可的‘compileJava’职分和‘run’
格局,因为自己有Gradle的 bin文件夹安装目录,作者急需做的正是营造和周转示例来
键入“gradle”命令,接下去将获取印证。

图片 9

照旧最大的疑惑者都承认Gradle营造对于那么些大约示例都拾壹分便利。它的一些约定和假设结合了简洁的重视性,超级轻便依照要求重写采取违背约定的体制。这一真情,那在Groovy并不是XML中也相当吸引人!

Ant和Maven同样,小编帮忙于只用那几个工具,通过 java 或许脚本调用 java来平昔构建和平运动行编写翻译好的 .class文件。顺便说一下,作者平常也保留这几个 .class 文件为JACR-V来运营,但那高于了本文的约束。

总结

IDE常常未有供给创设轻便的应用程序和例子,它的支出甚至比最简便的例子都要多,此时直接采纳 javac 和 java 来创设和周转实例就突显特别常有利。为了使Ant,Maven或许Gradle的构建工具变得更其有魅力,好多IDE扶持着这个零器件工具,那表示开拓者要将部件工具转移到IDE上,假使已经鲜明了早先创立的历程,那么IDE辅助的精练利用就已经成长为了二个老于世故的花色。

来自:ImportNews

发表评论

电子邮件地址不会被公开。 必填项已用*标注