Download "apache-maven-3.6.2-bin.zip" from the following site https://maven.apache.org/download.cgi
Expand and pass the path to bin. This time, I chose "D: \ apache-maven-3.6.2 \ bin".
mvn -version
OK if you start with. This time, the following was displayed, so I installed the JDK.
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
The downloaded JDK is "Amazon Corretto 8"
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-28T00:06:16+09:00)
Maven home: D:\apache-maven-3.6.2\bin\..
Java version: 1.8.0_232, vendor: Amazon.com Inc., runtime: C:\Program Files\Amazon Corretto\jdk1.8.0_232\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
It worked safely.
Set up a local repository. Open Maven \ conf \ settings.xml and set any location as a local repository as shown below.
settings.xml
<localRepository>D:/apache-maven-3.6.2/repository/</localRepository>
As an example, create an address book in an SWT application. The application consists of three jars. ・ View ・ Domain ・ Infrastructure
-Group Id: A name that does not overlap with all projects. Package name (domain + project name) -Artifact Id: Jar file name without version
It has a String named Name and Address 1, Address 2, Date named Birthday, and an int for management.
Address.java
package ml.kerotori.app.domain;
import java.util.Date;
public class Address {
private int no; //Management number
private String Name; //name
private String Address1; //Address 1
private String Address2; //Address 2
private Date Birthday; //birthday
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getAddress1() {
return Address1;
}
public void setAddress1(String address1) {
Address1 = address1;
}
public String getAddress2() {
return Address2;
}
public void setAddress2(String address2) {
Address2 = address2;
}
public Date getBirthday() {
return Birthday;
}
public void setBirthday(Date birthday) {
Birthday = birthday;
}
}
[ERROR]Source option 5 is not currently supported. Please use 6 or later.
[ERROR]Target option 1.5 is not currently supported. 1.Please use 6 or later.
pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
The whole picture is as follows.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.125 s
[INFO] Finished at: 2019-11-03T22:29:41+09:00
[INFO] ------------------------------------------------------------------------
Save the address book to an XML file so that it can be read.
Save.java
package ml.kerotori.app.infrastructure.core;
import java.beans.XMLEncoder;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public interface Save<T> {
public static <T> boolean saveXml(String fileName, T obj) {
//Save object data
try (XMLEncoder encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream(fileName)))) {
encoder.writeObject(obj);
} catch (FileNotFoundException e) {
return false;
}catch(Exception e) {
return false;
}
return true;
}
}
Load.java
package ml.kerotori.app.infrastructure.core;
import java.beans.XMLDecoder;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public interface Load<T> {
@SuppressWarnings("unchecked")
public static <T> T loadXml(String fileName) {
try (XMLDecoder decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream(fileName)))) {
return (T) decoder.readObject();
} catch (FileNotFoundException e) {
return null;
}catch(Exception e) {
return null;
}
}
}
AddressDao.java
package ml.kerotori.app.infrastructure.dao;
import java.io.Serializable;
import ml.kerotori.app.domain.Address;
import ml.kerotori.app.infrastructure.core.Load;
import ml.kerotori.app.infrastructure.core.Save;
public class AddressDao implements Serializable,Save<Address>, Load<Address> {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
public static Address Load(int no) {
return Load.loadXml(no + ".xml");
}
public boolean Save() {
return Save.saveXml(this.address.getNo() + ".xml", address);
}
}
Add the following to the infrastructure pom.xml.
xml.pom.xml
<dependencies>
<dependency>
<groupId>ml.kerotori.app</groupId>
<artifactId>Domain</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
AddressTest.java
package ml.kerotori.app.infrastructure.dao;
import static org.junit.jupiter.api.Assertions.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.jupiter.api.Test;
import ml.kerotori.app.domain.Address;
class AddressDaoTest {
@Test
void SaveTest1() {
Address address = new Address();
address.setNo(1);
address.setName("Ichiro Sato");
address.setAddress1("Hokkaido");
address.setAddress2("Sapporo");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = null;
try {
date = sdf.parse("1990/10/11");
} catch (ParseException e) {
//TODO auto-generated catch block
e.printStackTrace();
}
address.setBirthday(date);
AddressDao dao = new AddressDao();
dao.setAddress(address);
assertTrue(dao.Save());
}
@Test
void LoadTest1() {
Address address = AddressDao.Load(1);
assertEquals("Ichiro Sato", address.getName());
}
}
pom.xml(Parent project)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.7.2</version>
<configuration>
<workingDirectory>${project.basedir}/src/test/resources</workingDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</plugin>
If the test fails, running [Maven]-[Update Project] may help.
Regarding SWT for Windows, the new version (4.13) is for 64bit and does not work in a 32bit environment. https://download.eclipse.org/eclipse/downloads/drops4/R-4.13-201909161045/ Is the latest 32-bit version 3.8.2 below? https://archive.eclipse.org/eclipse/downloads/drops/R-3.8.2-201301310800/
In the Eclipse Marketplace, enter "WindowBuilder" in the search and install.
https://repo1.maven.org/maven2/org/eclipse/platform/org.eclipse.swt.win32.win32.x86/3.108.0/
All I had to do was physically delete the folder.
I gave up and decided to download it myself and manually register it in the repository.
Set the following in pom.xml of View.
pom.xml
<profiles>
<profile>
<id>windows_x86</id>
<activation>
<os>
<family>Windows</family>
<arch>x86</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>swt</groupId>
<artifactId>swt-win32-x86</artifactId>
<version>3.8.2</version>
<type>jar</type>
</dependency>
</dependencies>
</profile>
<profile>
<id>windows-x86_64</id>
<activation>
<os>
<family>Windows</family>
<arch>amd64</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>swt</groupId>
<artifactId>swt-win32-x86_64</artifactId>
<version>3.8.2</version>
<type>jar</type>
</dependency>
</dependencies>
</profile>
</profiles>
Download "swt-3.8.2-win32-win32-x86.zip" and "swt-3.8.2-win32-win32-x86_64.zip", and unzip them to find "swt.jar". Change the name as follows and save it in the "D: \ swt" folder. swt-3.8.2-win32-x86.jar swt-3.8.2-win32-x86_64.jar
Manually register to the repository with the following command.
SET REPO_URL=file:D:/apache-maven-3.6.2/repository/
mvn deploy:deploy-file -DrepositoryId=ml.kerotori.app -Durl=%REPO_URL% -Dfile=d:\swt\swt-3.8.2-win32-x86.jar -DgroupId=swt -DartifactId=swt-win32-x86 -Dversion=3.8.2 -Dpackaging=jar
mvn deploy:deploy-file -DrepositoryId=ml.kerotori.app -Durl=%REPO_URL% -Dfile=d:\swt\swt-3.8.2-win32-x86_64.jar -DgroupId=swt -DartifactId=swt-win32-x86_64 -Dversion=3.8.2 -Dpackaging=jar
The error did not disappear for some reason, but when I cleared the error and executed it, it worked normally.
For the time being, only normal operation. Input value check is omitted.
AddressView.java
package ml.kerotori.app.view;
import java.util.Date;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import ml.kerotori.app.domain.Address;
import ml.kerotori.app.infrastructure.dao.AddressDao;
public class AddressView {
protected Shell shell;
private Text txtNo;
private Text txtName;
private Text txtAddress1;
private Text txtAddress2;
private Text txtBirtyday;
/**
* Launch the application.
* @param args
*/
public static void main(String[] args) {
try {
AddressView window = new AddressView();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Open the window.
*/
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
/**
* Create contents of the window.
*/
protected void createContents() {
shell = new Shell();
shell.setSize(450, 300);
shell.setText("SWT Application");
shell.setLayout(new GridLayout(2, false));
Label lblNo = new Label(shell, SWT.NONE);
lblNo.setText("No");
txtNo = new Text(shell, SWT.BORDER);
txtNo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label label = new Label(shell, SWT.NONE);
label.setText("name");
txtName = new Text(shell, SWT.BORDER);
txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label label_1 = new Label(shell, SWT.NONE);
label_1.setText("Address 1");
txtAddress1 = new Text(shell, SWT.BORDER);
txtAddress1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label label_2 = new Label(shell, SWT.NONE);
label_2.setText("Address 2");
txtAddress2 = new Text(shell, SWT.BORDER);
txtAddress2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Label label_3 = new Label(shell, SWT.NONE);
label_3.setText("birthday");
txtBirtyday = new Text(shell, SWT.BORDER);
txtBirtyday.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
Button btnSave = new Button(shell, SWT.NONE);
btnSave.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
AddressDao dao = new AddressDao();
Address address = new Address();
address.setNo(Integer.parseInt(txtNo.getText()));
address.setName(txtName.getText());
address.setAddress1(txtAddress1.getText());
address.setAddress2(txtAddress2.getText());
address.setBirthday(new Date(txtBirtyday.getText()));
dao.setAddress(address);
if(dao.Save()) {
MessageBox msgBox = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.OK);
msgBox.setText("MessageBox");
msgBox.setMessage("Successful registration");
int reply = msgBox.open();
}else {
MessageBox msgBox = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
msgBox.setText("MessageBox");
msgBox.setMessage("Registration failure");
int reply = msgBox.open();
}
}
});
btnSave.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 2, 1));
btnSave.setText("Registration");
}
}
pom.xml
<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>
<parent>
<groupId>ml.kerotori.app</groupId>
<artifactId>SWTsample</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>View</artifactId>
<profiles>
<profile>
<id>windows_x86</id>
<activation>
<os>
<family>Windows</family>
<arch>x86</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>swt</groupId>
<artifactId>swt-win32-x86</artifactId>
<version>3.8.2</version>
<type>jar</type>
</dependency>
</dependencies>
</profile>
<profile>
<id>windows-x86_64</id>
<activation>
<os>
<family>Windows</family>
<arch>amd64</arch>
</os>
</activation>
<dependencies>
<dependency>
<groupId>swt</groupId>
<artifactId>swt-win32-x86_64</artifactId>
<version>3.8.2</version>
<type>jar</type>
</dependency>
</dependencies>
</profile>
</profiles>
<dependencies>
<dependency>
<groupId>ml.kerotori.app</groupId>
<artifactId>Domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>ml.kerotori.app</groupId>
<artifactId>Infrastructure</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
If you make pom.xml of the parent project as follows, a module is created in View.
pom.xml
<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>ml.kerotori.app</groupId>
<artifactId>SWTsample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>View</module>
<module>Infrastructure</module>
<module>Domain</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<finalName>SWTsample</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>ml.kerotori.app.view.AddressView</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- configure the plugin here -->
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Set with reference to the following. https://qiita.com/cotrpepe/items/7cafaacb538425a78f1f
For your reference. https://github.com/kero1976/SWTsample
Recommended Posts