软件构造课程 有关Maven IDEA Blog-2

软件构造 Maven IDEA Blog-2


关于这次blog

写这次blog的目的,主要是希望可以看到这个blog的童鞋们可以实现针对HIT的软件构造课程,实现第1次试验的脱离eclipse的build,主要使用的工具IDEA(可选),Travis-CI, Maven。

什么是Maven

在软件构造的2-2节中,我们这样“狭义”地定义一下Build,即将三个维度之一的从Build time 到 Run time。借助自动化的工具完成软件构造各个阶段的活动,来提高效率。而Maven正是这其中的一项工具(tools),除了Maven还有Ant,Gradle等等。这里承接上次Blog,在浅尝各个工具后,决定使用Maven进行专攻。

如何安装Maven

Maven安装其实很简单,主要有下面几个步骤(无论使用何种IDE,都不能跳过这个步骤)

  1. 从官网下载Maven,然后解压到某个文件夹中。
    下载Maven
  2. 配置环境变量,这一点对于已经配置过Java环境变量的童鞋来说并不困难,此处以Win10系统为例。需要配置M2_HOME和PATH两个环境变量。
    M2_HOME
    PATH
  3. 验证配置是否成功,在命令行中输入”mvn -version”,如果正确配置则有Maven Home和Java的位置版本等信息出现。
    mvn -version
  4. 可以改变默认的仓库的位置,参见菩提树下的杨过的相关教程。

如何使用Maven

其实最简单的办法还是借用某一种IDE来使用Maven,这样编辑起来更方便而且更容易上手。这里使用IDEA来进行辅助工具来进行演示,但这不是必须的,使用命令行也完全可以实现所有必须的功能。
以下有三种方法,我们将分别进行解释。
1. 在已有的项目加上Maven的支持,这也是我一开始采用的办法,只需要在项目名称上右键,选择“Add Framework support”,就会有选项可以选择maven。然后就可以利用已生成的pom.xml自己添加所需要的支持。
2. 新建新的Maven项目,然后导入需要的源文件,这时IDEA使用Maven会默认使用Maven进行build,会看到Maven特有的编译成功的结果。
3. 直接利用命令行进行Maven项目的编译,这里不赘述一些基本过程,参见已有的blog菩提树下的杨过的相关教程。

一些“坑”

刚刚Maven自动生成的pom.xml都应该类似这样

<?xml version="1.0" encoding="UTF-8"?>
<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>edu.hit</groupId>
  <artifactId>Lab1-1160300314</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Lab1-1160300314</name>
  <url>http://maven.apache.org</url>

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

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

我们就针对这样一个pom.xml来讲解里面带的坑。

  • 首先如果你在直接运行,就会提示找不到”org.junit.*”类。这是因为Junit导入的版本问题,不是我们需要使用的Junit4,而是更古老的版本Junit3.所以我们需要将这个依赖库改为:
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  • 如果你在源文件中使用了类似List<String> list = new Arraylist<>();这样的语句,那么在build的时候还会看到所有这样的语句均会报错,这是由于Maven默认使用的是JDK1.5,不支持这样的语句。而使用低版本的JDK是因为在很多服务器上仍然使用的是JDK5或者更低的版本,所以为了支持这样的服务器,Maven默认使用JDK5。为了使用高版本的JDK,我们可以在<dependencies>再增加以下代码,就可以使用jdk1.8。
<build>
        <defaultGoal>compile</defaultGoal>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
  • 另外添加依赖库的办法,可以使用Maven的仓库管理,直接找到需要的jar包,然后在pom.xml增加即可,此处以增加javax.json-1.0.jar为例。
    javax.json-1.0.jar
    然后直接点击就可以粘在<dependencies>里即可
<!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.0</version>
</dependency>

这样下来应该就可以使用了,记得文件组织格式一定要严格遵守maven所给出的形式!,build应该可以通过了(如果不能通过,见文章最后)。
再添加.travis.yml文件并将pom.xml和其一起push进仓库,再进入Travis-CI进行在线build。

language: java

jdk:
  - oraclejdk8

编译成功的截图如下图所示:
build-success


写在最后

如果刚刚还不能编译成功,我遇到的一种情况是因为我的编码格式出现了问题,我所有的源码都使用的UTF-8格式,在使用的时候会莫名无法解析,显示这个错误Error: unmappable character for encoding UTF8 during maven compilation,在Stack Overflow上面有一个解答,但是答案不能使用,需要改成<encoding>Cp1252</encoding>才能正常使用,不知道这里有什么问题,希望了解的童鞋给我私信。

另外对于学生,利用edu.cn结尾的邮箱真的有很大优惠,比如免费使用IDEA等jetbrain的全家桶,免费使用Travis-CI中对GitHub里面Private仓库的在线build,希望大家能够充分利用工具。
PS:获取Travis-CI的教育优惠可以利用GitHub教育版去“get the pack”。

展开阅读全文

使用IntelliJ运行Go应用程序时加载配置文件

10-03
<div class="post-text" itemprop="text"> <p>I use MacOS Mojave with IntelliJ Ultimate 2018.2.</p> <p>I wrote a go application that loads a config file from the directory of my project. I created an <code>InitConfig()</code> function to load the JSON file into a struct. this is thee code of my <code>Config.go</code> file</p> <pre><code>package main import ( "github.com/tkanos/gonfig" "log" ) type Configuration struct { WebServerPort int DbName string DbUser string DbPassword string DbPort int CertFile string KeyFile string EnableHttps bool } var AppConfiguration Configuration func InitConfig() { AppConfiguration = Configuration{} err := gonfig.GetConf(ExPath + "/config/config.json", &AppConfiguration) if err != nil { log.Fatalf("could not parse configuration file: %v",err) } } </code></pre> <p>I use a variable called <code>ExPath</code> that contains the current directory of the running binary, I created it with the following code (Path.go):</p> <pre><code>package main import ( "log" "os" "path/filepath" ) var ExPath string func InitPath() { ex, err := os.Executable() if err != nil { log.Fatalf("could not get executable path: %v",err) } ExPath = filepath.Dir(ex) } </code></pre> <p>when I try to run or debug the application, intellij is creating a directory where it compiles and runs the application, how can I tell it to also copy the json file?</p> <p>when I try to run/debug my App I get:</p> <pre><code>could not parse configuration file: open /private/var/folders/60/qzt2pgs173s4j_r6lby_mw1c0000gn/T/config/config.json: no such file or directory </code></pre> <p>I checked and that directory really doesn't contain my config directory. so.. is there a way to let intellij know it should copy it before executing my project?</p> <p>thanks!</p> </div>
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值