From 6bf0402ed78b6bdb563fec2592ff901ac25c841a Mon Sep 17 00:00:00 2001 From: Morph01 Date: Wed, 25 Dec 2024 11:35:09 +0100 Subject: [PATCH] feat: setup gradle pour lancer l'app et les test, ajout des commandes dans le README.md --- .gitattributes | 9 + .gitignore | 6 + .vscode/settings.json | 3 + README.md | 17 +- app/build.gradle | 46 ++++ app/src/main/java/sudoku/App.java | 14 + app/src/test/java/sudoku/AppTest.java | 17 ++ .../diagramme_classes_multidoku.png | Bin 0 -> 70137 bytes .../diagramme_classes_multidoku.svg | 3 - gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 244 ++++++++++++++++++ gradlew.bat | 92 +++++++ settings.gradle | 11 + src/test/java/sudoku/AppTest.java | 10 + 14 files changed, 473 insertions(+), 5 deletions(-) create mode 100644 .gitattributes create mode 100644 .vscode/settings.json create mode 100644 app/build.gradle create mode 100644 app/src/main/java/sudoku/App.java create mode 100644 app/src/test/java/sudoku/AppTest.java create mode 100644 conception_uml/diagramme_classes_multidoku.png delete mode 100644 conception_uml/diagramme_classes_multidoku.svg create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/test/java/sudoku/AppTest.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..097f9f9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +# +# https://help.github.com/articles/dealing-with-line-endings/ +# +# Linux start script should use lf +/gradlew text eol=lf + +# These are Windows script files and should use crlf +*.bat text eol=crlf + diff --git a/.gitignore b/.gitignore index 9154f4c..e714e79 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,9 @@ hs_err_pid* replay_pid* + +# Ignore Gradle project-specific cache directory +.gradle + +# Ignore Gradle build output directory +build diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e0f15db --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "automatic" +} \ No newline at end of file diff --git a/README.md b/README.md index 0290442..32f3de9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,21 @@ # Sudoku ALESSI Thibaut & ROGER Gwendal -## Diagramme des classes -![imagedc](conception_uml/diagramme_classes_multidoku.svg) +## Commandes utiles +*Pour les commandes gradle, il faut être dans la racine du projet.* + +**Lancer l'application** +```console +./gradlew run +``` + +**Lancer les tests** +```console +./gradlew test +``` + +## Diagramme des classes +![Diagramme des classes](conception_uml/diagramme_classes_multidoku.png) ## Cahier des charges La partie Génération ne fait pas partie de notre tronc commun. diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..3c60f56 --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,46 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This generated file contains a sample Java application project to get you started. + * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle + * User Manual available at https://docs.gradle.org/8.0.2/userguide/building_java_projects.html + */ + +plugins { + // Apply the application plugin to add support for building a CLI application in Java. + id 'application' +} + +repositories { + // Use Maven Central for resolving dependencies. + mavenCentral() +} + +dependencies { + // Use JUnit Jupiter for testing. + testImplementation 'org.junit.jupiter:junit-jupiter:5.9.1' + + // This dependency is used by the application. + implementation 'com.google.guava:guava:31.1-jre' +} + +application { + // Define the main class for the application. + mainClass = 'sudoku.App' +} + +test { + testLogging { + // Affiche les événements de passage, échec, saut et sortie standard/erreur + events "passed", "skipped", "failed", "standardOut", "standardError" + + // Affiche toujours les flux de sortie standard + showStandardStreams = true + + // Affiche les détails complets pour tous les événements + showExceptions true + showCauses true + showStackTraces true + } + useJUnitPlatform() +} \ No newline at end of file diff --git a/app/src/main/java/sudoku/App.java b/app/src/main/java/sudoku/App.java new file mode 100644 index 0000000..6aa33d4 --- /dev/null +++ b/app/src/main/java/sudoku/App.java @@ -0,0 +1,14 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package sudoku; + +public class App { + public String getGreeting() { + return "Hello World!"; + } + + public static void main(String[] args) { + System.out.println(new App().getGreeting()); + } +} diff --git a/app/src/test/java/sudoku/AppTest.java b/app/src/test/java/sudoku/AppTest.java new file mode 100644 index 0000000..62d8714 --- /dev/null +++ b/app/src/test/java/sudoku/AppTest.java @@ -0,0 +1,17 @@ +/* + * This Java source file was generated by the Gradle 'init' task. + */ +package sudoku; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class AppTest { + @Test + public void testExample() { + System.out.println("DOING TEST"); + assertEquals(2 + 2, 4); + System.out.println("DONE TEST"); + } +} \ No newline at end of file diff --git a/conception_uml/diagramme_classes_multidoku.png b/conception_uml/diagramme_classes_multidoku.png new file mode 100644 index 0000000000000000000000000000000000000000..98c8ec9657ee7c3b03279319db721d85c9298e03 GIT binary patch literal 70137 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 - -

contient

contient

utilise

contient

utilise

contient

contient

contient

agit_sur

agit_sur

implémente

implémente

utilise

implémente

implémente

implémente

implémente

implémente

implémente

1
1
1
1
1
1
1
1
1
1
1
1
N
*
*
*
N*N
N
1
1
1

Sudoku

+grille : Grille

+blocs : List<Bloc>

+contraintes : List<Contrainte>

+rentrerSudoku() : void

+resoudre(resolveur : Resolveur) : boolean

+ajouterContrainte(contrainte : Contrainte) : void

MultiDoku

+sudokus : List<Sudoku>

+contraintesPartage : List<ContraintePartage>

+resoudre(resolveur : Resolveur) : boolean

+ajouterContraintePartage(contrainte : ContraintePartage) : void

Grille

+taille : int // N×N

+cases : Symbole[taille][taille]

+afficherGrille() : void

+estValide() : boolean

+getValeursPossibles(x : int, y : int) : List<Symbole>

Bloc

+cases : List<Case>

+estValide() : boolean

«interface»

Contrainte

+estRespectee(grille : Grille, case : Case) : boolean

ContrainteLigne

+estRespectee(grille : Grille: case : Case) : boolean

ContrainteColonne

+estRespectee(grille : Grille: case : Case) : boolean

ContrainteBloc

+estRespectee(grille : Grille: case : Case) : boolean

«interface»

ContraintePartage

+estRespectee(case : Case) : boolean

ContrainteLignePartage

-casesPartagees : List<Case>

+estRespectee(case : Case) : boolean

ContrainteColonnePartage

-casesPartagees : List<Case>

+estRespectee(case : Case) : boolean

ContrainteBlocPartage

-casesPartagees : List<Case>

+estRespectee(case : Case) : boolean

«interface»

Resolveur

+resoudre(sudoku : Sudoku) : boolean

+resoudre(multidoku : MultiDoku) : boolean

ResolveurRegles

+resoudre(sudoku : Sudoku) : boolean

+resoudre(multidoku : MultiDoku) : boolean

ResolveurBacktrace

+backtrace : Backtrace

+resoudre(sudoku : Sudoku) : boolean

+resoudre(multidoku : MultiDoku) : boolean

Case

+valeur : Symbole

+x : int

+y : int

Symbole

+valeur : char

+equals(symbole : Symbole) : boolean

Backtrace

+pile : Stack<Case>

+explorer(cases : List<Case>) : boolean

\ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..bdc9a83 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..79a61d4 --- /dev/null +++ b/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..93e3f59 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..31c68e6 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,11 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * + * Detailed information about configuring a multi-project build in Gradle can be found + * in the user manual at https://docs.gradle.org/8.0.2/userguide/multi_project_builds.html + */ + +rootProject.name = 'Sudoku' +include('app') diff --git a/src/test/java/sudoku/AppTest.java b/src/test/java/sudoku/AppTest.java new file mode 100644 index 0000000..5ec133c --- /dev/null +++ b/src/test/java/sudoku/AppTest.java @@ -0,0 +1,10 @@ +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class AppTest { + @Test + public void testHelloWorld() { + System.out.println("Hello, World!"); + assertEquals(1 + 1, 2); + } +} \ No newline at end of file