Installing Maven(安装Maven)
现在,了解如何使用AWS SDK来访问AWS产品。这并不简单。为了简化操作,我们将使用Apache Maven工具。Maven维护一组构建脚本,使我们能够构建程序,包括最新的SDK库,并提高程序在空间和加载时间方面的效率。例如,我们将使用Maven脚本仅包含代码中使用的类,这大大减少了程序的大小,从而减少了加载时间和存储空间,降低了AWS成本。
首先,你应该通过以下命令检查是否已安装Maven:
mvn -version
如果已经安装了Maven,则可以跳过整个主题。如果未安装Maven,将显示输出"mvn: command not found"。
以下三条命令将安装最新版本的Maven:
sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
上述命令通常不会显示任何输出。最后,我们使用以下命令安装Maven:
sudo yum install -y apache-maven
上述命令将生成大量输出。输入以下命令查看是否安装正确:
mvn -version
输出将显示类似以下内容:
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T07:58:13Z)
Maven home: /usr/share/apache-maven
Java version: 1.8.0_312, vendor: Red Hat, Inc.
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.amzn2.0.2.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.14.268-205.500.amzn2.x86_64", arch: "amd64", family: "unix"
至此,Maven安装完成。
Creating First Java App with AWS(创建第一个Java应用程序并使用AWS)
一旦安装了Maven,我们可以运行以下命令来创建一个新的Java应用程序。Maven的一个有用选项是它可以为Java项目设置目录结构。我们可以用一个简单的命令设置一个项目:
mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=au.edu.scu.app -DartifactId=myapp
此命令在当前目录中设置了一个项目,包含多个嵌套目录,如下图所示,展开所有文件夹后,文件树窗口显示如下:
尽管这看起来很复杂,但这是Java项目的标准结构。注意有一个'main'文件夹结构和一个'test'文件夹结构。高亮显示的文件pom.xml是Maven的配置文件,我们需要编辑它以指导Maven如何构建我们的项目。我们自动生成了三个源文件:
- App.java - Java程序主文件(包含main()函数)
- AppTest.java - 用于执行单元测试的Java程序
- pom.xml - Maven项目配置文件(上面已高亮显示)
App.java中的Java程序如下:
package au.edu.scu.app;
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
注意Maven如何在第一行设置包名,这反映在目录结构中。再次强调,这是一个非常简单的Java"Hello World"程序。测试应用程序也是一个简单的结构,你可以在空闲时间查看。
Configuring POM File(配置POM文件)
对我们来说,最重要的文件是pom.xml文件,其内容如下。pom代表"项目对象模型"。
此文件提供有关如何构建和打包项目的重要信息。我们将向该文件添加许多额外的标签,例如添加AWS SDK库以访问AWS云产品。提供的信息包括以下标签:
- <groupId> - 标准项目前缀
- <artifactId> - 生成包的名称
- <packaging> - 包含生成包的文件类型
- <version> - 附加到生成包名称的版本
- <dependencies> - 必须包含在生成包中的包
我们将在使用AWS包时添加<dependency>标签。此POM文件仅包含junit依赖项,这是Java单元测试包。我们还需要添加用于AWS的依赖项,这些依赖项旨在重新组织我们的输出包。这些将有助于满足一些独特的AWS结构,例如AWS Lambdas不是程序而是云中执行的函数。AWS Lambdas将在单独的实验课中讨论。
我们的第一步是用这个版本替换当前的pom.xml文件。
确保你最初使用此配置。maven-compiler插件确保使用Java 1.8。依赖管理确保使用2.5版本的SDK,software.amazon.awssdk依赖项是我们将使用的2.5版本SDK的软件包前缀。在你的AWS开发中使用一致的版本非常重要,因为AWS SDK版本不兼容,例如,2.0版本不兼容2.5版本。
请注意,未来我们还将访问我们程序使用的特定AWS SDK v2包。我们将在使用不同的AWS包和产品时向此文件添加<dependency>标签。此POM文件仅包含junit依赖项,这是Java单元测试包。我们还将添加用于AWS的依赖项,这些依赖项旨在重新组织我们的输出包。这些将有助于满足一些独特的AWS结构,例如AWS Lambdas不是程序而是云中执行的函数。
要构建我们的程序,我们需要导航到pom.xml文件所在的目录。可以在bash终端中使用"cd myapp"命令执行此操作,当前pom.xml位于"myapp"目录中。
cd myapp
然后我们运行以下命令来构建(以及编译)我们的程序。
mvn package
这将在"myapp/target/"目录中生成一个可执行的JAR文件(即"myapp-1.0.jar")。要运行此JAR文件,你需要将默认目录设置为项目的根目录,该目录包含maven将使用的pom.xml文件。目标目录中将有其他文件,这些文件用于构建JAR文件以及你可以运行的单元测试程序,如果你添加了单元测试。
要运行JAR文件,可以使用以下命令:
java -cp target/myapp-1.0.jar au.edu.scu.app.App
注意我们需要指定目录"target/",因为这是Maven放置可执行代码的JAR文件的位置。这有点复杂,因为maven配置文件没有指定哪个类包含首先执行的main()函数。类名au.edu.scu.app.App是包含main()函数的类的完全限定名称(包含包名)。
Shade Plugin(Shade插件)
为了解决上一节中提到的问题,我们可以使用maven shade插件。我们将在许多未来的示例中使用shade插件,但对于此示例,我们需要将以下插件定义添加到pom.xml文件中的<plugins>标签内。你可以将其放在"maven-compiler-plugin"定义之前。只需复制以下代码并粘贴到你的pom.xml中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>au.edu.scu.app.App</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
shade插件通过修改JAR文件来指定主类,我们可以通过以下命令运行程序:
java -jar target/myapp-1.0.jar
shade插件还有其他用途,我们将在后面看到。我们将使用它来构建各种Amazon服务所需的JAR文件,这些服务需要可执行代码,但不一定是可执行程序。