Chat
This commit is contained in:
parent
c18c4a2555
commit
3b223dfea2
BIN
.gradle/7.6/checksums/checksums.lock
Normal file
BIN
.gradle/7.6/checksums/checksums.lock
Normal file
Binary file not shown.
BIN
.gradle/7.6/checksums/md5-checksums.bin
Normal file
BIN
.gradle/7.6/checksums/md5-checksums.bin
Normal file
Binary file not shown.
BIN
.gradle/7.6/checksums/sha1-checksums.bin
Normal file
BIN
.gradle/7.6/checksums/sha1-checksums.bin
Normal file
Binary file not shown.
BIN
.gradle/7.6/dependencies-accessors/dependencies-accessors.lock
Normal file
BIN
.gradle/7.6/dependencies-accessors/dependencies-accessors.lock
Normal file
Binary file not shown.
0
.gradle/7.6/dependencies-accessors/gc.properties
Normal file
0
.gradle/7.6/dependencies-accessors/gc.properties
Normal file
BIN
.gradle/7.6/executionHistory/executionHistory.bin
Normal file
BIN
.gradle/7.6/executionHistory/executionHistory.bin
Normal file
Binary file not shown.
BIN
.gradle/7.6/executionHistory/executionHistory.lock
Normal file
BIN
.gradle/7.6/executionHistory/executionHistory.lock
Normal file
Binary file not shown.
BIN
.gradle/7.6/fileChanges/last-build.bin
Normal file
BIN
.gradle/7.6/fileChanges/last-build.bin
Normal file
Binary file not shown.
BIN
.gradle/7.6/fileHashes/fileHashes.bin
Normal file
BIN
.gradle/7.6/fileHashes/fileHashes.bin
Normal file
Binary file not shown.
BIN
.gradle/7.6/fileHashes/fileHashes.lock
Normal file
BIN
.gradle/7.6/fileHashes/fileHashes.lock
Normal file
Binary file not shown.
BIN
.gradle/7.6/fileHashes/resourceHashesCache.bin
Normal file
BIN
.gradle/7.6/fileHashes/resourceHashesCache.bin
Normal file
Binary file not shown.
0
.gradle/7.6/gc.properties
Normal file
0
.gradle/7.6/gc.properties
Normal file
BIN
.gradle/buildOutputCleanup/buildOutputCleanup.lock
Normal file
BIN
.gradle/buildOutputCleanup/buildOutputCleanup.lock
Normal file
Binary file not shown.
2
.gradle/buildOutputCleanup/cache.properties
Normal file
2
.gradle/buildOutputCleanup/cache.properties
Normal file
@ -0,0 +1,2 @@
|
||||
#Mon Dec 18 22:00:55 CET 2023
|
||||
gradle.version=7.6
|
BIN
.gradle/buildOutputCleanup/outputFiles.bin
Normal file
BIN
.gradle/buildOutputCleanup/outputFiles.bin
Normal file
Binary file not shown.
BIN
.gradle/file-system.probe
Normal file
BIN
.gradle/file-system.probe
Normal file
Binary file not shown.
0
.gradle/vcs-1/gc.properties
Normal file
0
.gradle/vcs-1/gc.properties
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
6
.idea/compiler.xml
generated
Normal file
6
.idea/compiler.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="19" />
|
||||
</component>
|
||||
</project>
|
6
.idea/google-java-format.xml
generated
Normal file
6
.idea/google-java-format.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GoogleJavaFormatSettings">
|
||||
<option name="enabled" value="true" />
|
||||
</component>
|
||||
</project>
|
16
.idea/gradle.xml
generated
Normal file
16
.idea/gradle.xml
generated
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleJvm" value="corretto-19" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
35
.idea/jarRepositories.xml
generated
Normal file
35
.idea/jarRepositories.xml
generated
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="akka-repository" />
|
||||
<option name="name" value="Akka library repository" />
|
||||
<option name="url" value="https://repo.akka.io/maven" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="MavenLocal" />
|
||||
<option name="name" value="MavenLocal" />
|
||||
<option name="url" value="file:$MAVEN_REPOSITORY$/" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="MavenRepo" />
|
||||
<option name="name" value="MavenRepo" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
6
.idea/jpa-buddy.xml
generated
Normal file
6
.idea/jpa-buddy.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="JpaBuddyIdeaProjectConfig">
|
||||
<option name="renamerInitialized" value="true" />
|
||||
</component>
|
||||
</project>
|
16
.idea/misc.xml
generated
Normal file
16
.idea/misc.xml
generated
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
<option name="workspaceImportForciblyTurnedOn" value="true" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_19" project-jdk-name="corretto-21" project-jdk-type="JavaSDK" />
|
||||
<component name="ProjectType">
|
||||
<option name="id" value="jpab" />
|
||||
</component>
|
||||
</project>
|
124
.idea/uiDesigner.xml
generated
Normal file
124
.idea/uiDesigner.xml
generated
Normal file
@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Palette2">
|
||||
<group name="Swing">
|
||||
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||
</item>
|
||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
|
||||
<initial-values>
|
||||
<property name="text" value="Button" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="RadioButton" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="CheckBox" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
|
||||
<initial-values>
|
||||
<property name="text" value="Label" />
|
||||
</initial-values>
|
||||
</item>
|
||||
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
|
||||
<preferred-size width="150" height="-1" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
|
||||
<preferred-size width="150" height="50" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
|
||||
<preferred-size width="200" height="200" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
|
||||
</item>
|
||||
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
|
||||
<preferred-size width="-1" height="20" />
|
||||
</default-constraints>
|
||||
</item>
|
||||
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
|
||||
</item>
|
||||
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
|
||||
</item>
|
||||
</group>
|
||||
</component>
|
||||
</project>
|
7
.idea/vcs.xml
generated
Normal file
7
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
12
README.txt
Normal file
12
README.txt
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
Juego del bien público
|
||||
|
||||
- Varios jugadores.
|
||||
- Reciben monedas al comienzo.
|
||||
- Hay un bote central
|
||||
- Cada turno se elige con cuántas monedas uno colabora al bote
|
||||
- Entonces, el contenido del bote se multiplica por dos y se divide entre todos los jugadores.
|
||||
- Pasadas N rondas, el jugador se queda con lo que ganó + monedas iniciales.
|
||||
|
||||
Comprobar cómo de dispuesta está la gente a contribuir a un bien, que será compartido por todos por igual,
|
||||
hayan contribuido o no.
|
25
build.gradle
Normal file
25
build.gradle
Normal file
@ -0,0 +1,25 @@
|
||||
apply plugin: 'java'
|
||||
apply plugin: 'idea'
|
||||
apply plugin: 'application'
|
||||
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
mavenLocal()
|
||||
maven {
|
||||
url "https://repo.akka.io/maven"
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'com.typesafe.akka:akka-actor-typed_2.13:2.9.0'
|
||||
implementation 'ch.qos.logback:logback-classic:1.2.3'
|
||||
testImplementation 'com.typesafe.akka:akka-actor-testkit-typed_2.13:2.9.0'
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
}
|
||||
|
||||
mainClassName = "com.example.AkkaQuickstart"
|
||||
|
||||
run {
|
||||
standardInput = System.in
|
||||
}
|
24
build.sbt
Normal file
24
build.sbt
Normal file
@ -0,0 +1,24 @@
|
||||
name := "akka-quickstart-java"
|
||||
|
||||
version := "1.0"
|
||||
|
||||
scalaVersion := "2.13.12"
|
||||
|
||||
lazy val akkaVersion = "2.9.0"
|
||||
|
||||
resolvers += "Akka library repository".at("https://repo.akka.io/maven")
|
||||
|
||||
// Run in a separate JVM, to make sure sbt waits until all threads have
|
||||
// finished before returning.
|
||||
// If you want to keep the application running while executing other
|
||||
// sbt tasks, consider https://github.com/spray/sbt-revolver/
|
||||
fork := true
|
||||
|
||||
resolvers += "Akka library repository".at("https://repo.akka.io/maven")
|
||||
|
||||
libraryDependencies ++= Seq(
|
||||
"com.typesafe.akka" %% "akka-actor-typed" % akkaVersion,
|
||||
"com.typesafe.akka" %% "akka-actor-testkit-typed" % akkaVersion,
|
||||
"ch.qos.logback" % "logback-classic" % "1.2.3",
|
||||
"junit" % "junit" % "4.13.1" % Test,
|
||||
"com.novocode" % "junit-interface" % "0.11" % Test)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,146 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - Class dev.freireservices.social_altruism.ChatQuickStartTest</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<h1>Class dev.freireservices.social_altruism.ChatQuickStartTest</h1>
|
||||
<div class="breadcrumbs">
|
||||
<a href="../index.html">all</a> >
|
||||
<a href="../packages/dev.freireservices.social_altruism.html">dev.freireservices.social_altruism</a> > ChatQuickStartTest</div>
|
||||
<div id="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox" id="tests">
|
||||
<div class="counter">2</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="failures">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="ignored">
|
||||
<div class="counter">0</div>
|
||||
<p>ignored</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="duration">
|
||||
<div class="counter">0.944s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success" id="successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="tabs">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a href="#tab0">Tests</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#tab1">Standard output</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="tab0" class="tab">
|
||||
<h2>Tests</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Test</th>
|
||||
<th>Duration</th>
|
||||
<th>Result</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="success">testActorGetsUserDenied</td>
|
||||
<td class="success">0.856s</td>
|
||||
<td class="success">passed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="success">testGreeterActorSendingOfGreeting</td>
|
||||
<td class="success">0.088s</td>
|
||||
<td class="success">passed</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="tab1" class="tab">
|
||||
<h2>Standard output</h2>
|
||||
<span class="code">
|
||||
<pre>[2023-12-22 09:02:23,397] [INFO] [akka.event.slf4j.Slf4jLogger] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [] - Slf4jLogger started
|
||||
[2023-12-22 09:02:23,552] [ERROR] [akka.actor.testkit.typed.internal.ActorTestKitGuardian$$anonfun$handleSpawnException$1] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [akka://ChatQuickStartTest/user] - Spawn failed, props [EmptyProps]
|
||||
akka.actor.InvalidActorNameException: actor name [chatRoom] is not unique!
|
||||
at akka.actor.dungeon.ChildrenContainer$NormalChildrenContainer.reserve(ChildrenContainer.scala:134)
|
||||
at akka.actor.dungeon.Children.reserveChild(Children.scala:147)
|
||||
at akka.actor.dungeon.Children.reserveChild$(Children.scala:145)
|
||||
at akka.actor.ActorCell.reserveChild(ActorCell.scala:410)
|
||||
at akka.actor.dungeon.Children.makeChild(Children.scala:300)
|
||||
at akka.actor.dungeon.Children.actorOf(Children.scala:49)
|
||||
at akka.actor.dungeon.Children.actorOf$(Children.scala:48)
|
||||
at akka.actor.ActorCell.actorOf(ActorCell.scala:410)
|
||||
at akka.actor.typed.internal.adapter.ActorRefFactoryAdapter$.spawn(ActorRefFactoryAdapter.scala:55)
|
||||
at akka.actor.typed.internal.adapter.ActorContextAdapter.spawn(ActorContextAdapter.scala:73)
|
||||
at akka.actor.testkit.typed.internal.ActorTestKitGuardian$.$anonfun$testKitGuardian$1(TestKitUtils.scala:35)
|
||||
at akka.actor.typed.internal.BehaviorImpl$ReceiveBehavior.receive(BehaviorImpl.scala:136)
|
||||
at akka.actor.typed.Behavior$.interpret(Behavior.scala:282)
|
||||
at akka.actor.typed.Behavior$.interpretMessage(Behavior.scala:238)
|
||||
at akka.actor.typed.internal.InterceptorImpl$$anon$2.apply(InterceptorImpl.scala:57)
|
||||
at akka.actor.typed.internal.adapter.GuardianStopInterceptor.aroundReceive(GuardianStartupBehavior.scala:59)
|
||||
at akka.actor.typed.internal.InterceptorImpl.receive(InterceptorImpl.scala:85)
|
||||
at akka.actor.typed.Behavior$.interpret(Behavior.scala:282)
|
||||
at akka.actor.typed.Behavior$.interpretMessage(Behavior.scala:238)
|
||||
at akka.actor.typed.internal.adapter.ActorAdapter.handleMessage(ActorAdapter.scala:133)
|
||||
at akka.actor.typed.internal.adapter.ActorAdapter.aroundReceive(ActorAdapter.scala:109)
|
||||
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:579)
|
||||
at akka.actor.ActorCell.invoke(ActorCell.scala:547)
|
||||
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270)
|
||||
at akka.dispatch.Mailbox.run(Mailbox.scala:231)
|
||||
at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
|
||||
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
|
||||
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1311)
|
||||
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1840)
|
||||
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1806)
|
||||
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
|
||||
[2023-12-22 09:02:23,640] [INFO] [akka.actor.LocalActorRef] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [akka://ChatQuickStartTest/user/$a] - Message [dev.freireservices.social_altruism.ChatRoom$GetSession] to Actor[akka://ChatQuickStartTest/user/$a#-835521502] was not delivered. [1] dead letters encountered. If this is not an expected behavior then Actor[akka://ChatQuickStartTest/user/$a#-835521502] may have terminated unexpectedly. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
|
||||
[2023-12-22 09:02:23,665] [INFO] [akka.actor.CoordinatedShutdown] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [CoordinatedShutdown(akka://ChatQuickStartTest)] - Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
|
||||
</pre>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="http://www.gradle.org">Gradle 7.6</a> at 22 dic 2023, 9:02:23</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
179
build/reports/tests/test/css/base-style.css
Normal file
179
build/reports/tests/test/css/base-style.css
Normal file
@ -0,0 +1,179 @@
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
body, a, a:visited {
|
||||
color: #303030;
|
||||
}
|
||||
|
||||
#content {
|
||||
padding-left: 50px;
|
||||
padding-right: 50px;
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
#content h1 {
|
||||
font-size: 160%;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
#footer {
|
||||
margin-top: 100px;
|
||||
font-size: 80%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#footer, #footer a {
|
||||
color: #a0a0a0;
|
||||
}
|
||||
|
||||
#line-wrapping-toggle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#label-for-line-wrapping-toggle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
ul.tabLinks {
|
||||
padding-left: 0;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
overflow: auto;
|
||||
min-width: 800px;
|
||||
width: auto !important;
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
ul.tabLinks li {
|
||||
float: left;
|
||||
height: 100%;
|
||||
list-style: none;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
margin-bottom: 0;
|
||||
-moz-border-radius: 7px;
|
||||
border-radius: 7px;
|
||||
margin-right: 25px;
|
||||
border: solid 1px #d4d4d4;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
ul.tabLinks li:hover {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
ul.tabLinks li.selected {
|
||||
background-color: #c5f0f5;
|
||||
border-color: #c5f0f5;
|
||||
}
|
||||
|
||||
ul.tabLinks a {
|
||||
font-size: 120%;
|
||||
display: block;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.tabLinks li h2 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.tab {
|
||||
}
|
||||
|
||||
div.selected {
|
||||
display: block;
|
||||
}
|
||||
|
||||
div.deselected {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.tab table {
|
||||
min-width: 350px;
|
||||
width: auto !important;
|
||||
width: 350px;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
div.tab th, div.tab table {
|
||||
border-bottom: solid #d0d0d0 1px;
|
||||
}
|
||||
|
||||
div.tab th {
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
padding-left: 6em;
|
||||
}
|
||||
|
||||
div.tab th:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
div.tab td {
|
||||
white-space: nowrap;
|
||||
padding-left: 6em;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
|
||||
div.tab td:first-child {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
div.tab td.numeric, div.tab th.numeric {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
span.code {
|
||||
display: inline-block;
|
||||
margin-top: 0em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
span.code pre {
|
||||
font-size: 11pt;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
margin: 0;
|
||||
background-color: #f7f7f7;
|
||||
border: solid 1px #d0d0d0;
|
||||
min-width: 700px;
|
||||
width: auto !important;
|
||||
width: 700px;
|
||||
}
|
||||
|
||||
span.wrapped pre {
|
||||
word-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
label.hidden {
|
||||
display: none;
|
||||
}
|
84
build/reports/tests/test/css/style.css
Normal file
84
build/reports/tests/test/css/style.css
Normal file
@ -0,0 +1,84 @@
|
||||
|
||||
#summary {
|
||||
margin-top: 30px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
#summary table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#summary td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.breadcrumbs, .breadcrumbs a {
|
||||
color: #606060;
|
||||
}
|
||||
|
||||
.infoBox {
|
||||
width: 110px;
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.infoBox p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.counter, .percent {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
#duration {
|
||||
width: 125px;
|
||||
}
|
||||
|
||||
#successRate, .summaryGroup {
|
||||
border: solid 2px #d0d0d0;
|
||||
-moz-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#successRate {
|
||||
width: 140px;
|
||||
margin-left: 35px;
|
||||
}
|
||||
|
||||
#successRate .percent {
|
||||
font-size: 180%;
|
||||
}
|
||||
|
||||
.success, .success a {
|
||||
color: #008000;
|
||||
}
|
||||
|
||||
div.success, #successRate.success {
|
||||
background-color: #bbd9bb;
|
||||
border-color: #008000;
|
||||
}
|
||||
|
||||
.failures, .failures a {
|
||||
color: #b60808;
|
||||
}
|
||||
|
||||
.skipped, .skipped a {
|
||||
color: #c09853;
|
||||
}
|
||||
|
||||
div.failures, #successRate.failures {
|
||||
background-color: #ecdada;
|
||||
border-color: #b60808;
|
||||
}
|
||||
|
||||
ul.linkList {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
ul.linkList li {
|
||||
list-style: none;
|
||||
margin-bottom: 5px;
|
||||
}
|
133
build/reports/tests/test/index.html
Normal file
133
build/reports/tests/test/index.html
Normal file
@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - Test Summary</title>
|
||||
<link href="css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<h1>Test Summary</h1>
|
||||
<div id="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox" id="tests">
|
||||
<div class="counter">2</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="failures">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="ignored">
|
||||
<div class="counter">0</div>
|
||||
<p>ignored</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="duration">
|
||||
<div class="counter">0.944s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success" id="successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="tabs">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a href="#tab0">Packages</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#tab1">Classes</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="tab0" class="tab">
|
||||
<h2>Packages</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Package</th>
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Ignored</th>
|
||||
<th>Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="packages/dev.freireservices.social_altruism.html">dev.freireservices.social_altruism</a>
|
||||
</td>
|
||||
<td>2</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0.944s</td>
|
||||
<td class="success">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="tab1" class="tab">
|
||||
<h2>Classes</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Class</th>
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Ignored</th>
|
||||
<th>Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="classes/dev.freireservices.social_altruism.ChatQuickStartTest.html">dev.freireservices.social_altruism.ChatQuickStartTest</a>
|
||||
</td>
|
||||
<td>2</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0.944s</td>
|
||||
<td class="success">100%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="http://www.gradle.org">Gradle 7.6</a> at 22 dic 2023, 9:02:23</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
194
build/reports/tests/test/js/report.js
Normal file
194
build/reports/tests/test/js/report.js
Normal file
@ -0,0 +1,194 @@
|
||||
(function (window, document) {
|
||||
"use strict";
|
||||
|
||||
var tabs = {};
|
||||
|
||||
function changeElementClass(element, classValue) {
|
||||
if (element.getAttribute("className")) {
|
||||
element.setAttribute("className", classValue);
|
||||
} else {
|
||||
element.setAttribute("class", classValue);
|
||||
}
|
||||
}
|
||||
|
||||
function getClassAttribute(element) {
|
||||
if (element.getAttribute("className")) {
|
||||
return element.getAttribute("className");
|
||||
} else {
|
||||
return element.getAttribute("class");
|
||||
}
|
||||
}
|
||||
|
||||
function addClass(element, classValue) {
|
||||
changeElementClass(element, getClassAttribute(element) + " " + classValue);
|
||||
}
|
||||
|
||||
function removeClass(element, classValue) {
|
||||
changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
|
||||
}
|
||||
|
||||
function initTabs() {
|
||||
var container = document.getElementById("tabs");
|
||||
|
||||
tabs.tabs = findTabs(container);
|
||||
tabs.titles = findTitles(tabs.tabs);
|
||||
tabs.headers = findHeaders(container);
|
||||
tabs.select = select;
|
||||
tabs.deselectAll = deselectAll;
|
||||
tabs.select(0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function getCheckBox() {
|
||||
return document.getElementById("line-wrapping-toggle");
|
||||
}
|
||||
|
||||
function getLabelForCheckBox() {
|
||||
return document.getElementById("label-for-line-wrapping-toggle");
|
||||
}
|
||||
|
||||
function findCodeBlocks() {
|
||||
var spans = document.getElementById("tabs").getElementsByTagName("span");
|
||||
var codeBlocks = [];
|
||||
for (var i = 0; i < spans.length; ++i) {
|
||||
if (spans[i].className.indexOf("code") >= 0) {
|
||||
codeBlocks.push(spans[i]);
|
||||
}
|
||||
}
|
||||
return codeBlocks;
|
||||
}
|
||||
|
||||
function forAllCodeBlocks(operation) {
|
||||
var codeBlocks = findCodeBlocks();
|
||||
|
||||
for (var i = 0; i < codeBlocks.length; ++i) {
|
||||
operation(codeBlocks[i], "wrapped");
|
||||
}
|
||||
}
|
||||
|
||||
function toggleLineWrapping() {
|
||||
var checkBox = getCheckBox();
|
||||
|
||||
if (checkBox.checked) {
|
||||
forAllCodeBlocks(addClass);
|
||||
} else {
|
||||
forAllCodeBlocks(removeClass);
|
||||
}
|
||||
}
|
||||
|
||||
function initControls() {
|
||||
if (findCodeBlocks().length > 0) {
|
||||
var checkBox = getCheckBox();
|
||||
var label = getLabelForCheckBox();
|
||||
|
||||
checkBox.onclick = toggleLineWrapping;
|
||||
checkBox.checked = false;
|
||||
|
||||
removeClass(label, "hidden");
|
||||
}
|
||||
}
|
||||
|
||||
function switchTab() {
|
||||
var id = this.id.substr(1);
|
||||
|
||||
for (var i = 0; i < tabs.tabs.length; i++) {
|
||||
if (tabs.tabs[i].id === id) {
|
||||
tabs.select(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function select(i) {
|
||||
this.deselectAll();
|
||||
|
||||
changeElementClass(this.tabs[i], "tab selected");
|
||||
changeElementClass(this.headers[i], "selected");
|
||||
|
||||
while (this.headers[i].firstChild) {
|
||||
this.headers[i].removeChild(this.headers[i].firstChild);
|
||||
}
|
||||
|
||||
var h2 = document.createElement("H2");
|
||||
|
||||
h2.appendChild(document.createTextNode(this.titles[i]));
|
||||
this.headers[i].appendChild(h2);
|
||||
}
|
||||
|
||||
function deselectAll() {
|
||||
for (var i = 0; i < this.tabs.length; i++) {
|
||||
changeElementClass(this.tabs[i], "tab deselected");
|
||||
changeElementClass(this.headers[i], "deselected");
|
||||
|
||||
while (this.headers[i].firstChild) {
|
||||
this.headers[i].removeChild(this.headers[i].firstChild);
|
||||
}
|
||||
|
||||
var a = document.createElement("A");
|
||||
|
||||
a.setAttribute("id", "ltab" + i);
|
||||
a.setAttribute("href", "#tab" + i);
|
||||
a.onclick = switchTab;
|
||||
a.appendChild(document.createTextNode(this.titles[i]));
|
||||
|
||||
this.headers[i].appendChild(a);
|
||||
}
|
||||
}
|
||||
|
||||
function findTabs(container) {
|
||||
return findChildElements(container, "DIV", "tab");
|
||||
}
|
||||
|
||||
function findHeaders(container) {
|
||||
var owner = findChildElements(container, "UL", "tabLinks");
|
||||
return findChildElements(owner[0], "LI", null);
|
||||
}
|
||||
|
||||
function findTitles(tabs) {
|
||||
var titles = [];
|
||||
|
||||
for (var i = 0; i < tabs.length; i++) {
|
||||
var tab = tabs[i];
|
||||
var header = findChildElements(tab, "H2", null)[0];
|
||||
|
||||
header.parentNode.removeChild(header);
|
||||
|
||||
if (header.innerText) {
|
||||
titles.push(header.innerText);
|
||||
} else {
|
||||
titles.push(header.textContent);
|
||||
}
|
||||
}
|
||||
|
||||
return titles;
|
||||
}
|
||||
|
||||
function findChildElements(container, name, targetClass) {
|
||||
var elements = [];
|
||||
var children = container.childNodes;
|
||||
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
var child = children.item(i);
|
||||
|
||||
if (child.nodeType === 1 && child.nodeName === name) {
|
||||
if (targetClass && child.className.indexOf(targetClass) < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
elements.push(child);
|
||||
}
|
||||
}
|
||||
|
||||
return elements;
|
||||
}
|
||||
|
||||
// Entry point.
|
||||
|
||||
window.onload = function() {
|
||||
initTabs();
|
||||
initControls();
|
||||
};
|
||||
} (window, window.document));
|
@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
||||
<meta http-equiv="x-ua-compatible" content="IE=edge"/>
|
||||
<title>Test results - Package dev.freireservices.social_altruism</title>
|
||||
<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="../css/style.css" rel="stylesheet" type="text/css"/>
|
||||
<script src="../js/report.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content">
|
||||
<h1>Package dev.freireservices.social_altruism</h1>
|
||||
<div class="breadcrumbs">
|
||||
<a href="../index.html">all</a> > dev.freireservices.social_altruism</div>
|
||||
<div id="summary">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="summaryGroup">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="infoBox" id="tests">
|
||||
<div class="counter">2</div>
|
||||
<p>tests</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="failures">
|
||||
<div class="counter">0</div>
|
||||
<p>failures</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="ignored">
|
||||
<div class="counter">0</div>
|
||||
<p>ignored</p>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox" id="duration">
|
||||
<div class="counter">0.944s</div>
|
||||
<p>duration</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
<div class="infoBox success" id="successRate">
|
||||
<div class="percent">100%</div>
|
||||
<p>successful</p>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div id="tabs">
|
||||
<ul class="tabLinks">
|
||||
<li>
|
||||
<a href="#tab0">Classes</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div id="tab0" class="tab">
|
||||
<h2>Classes</h2>
|
||||
<table>
|
||||
<thread>
|
||||
<tr>
|
||||
<th>Class</th>
|
||||
<th>Tests</th>
|
||||
<th>Failures</th>
|
||||
<th>Ignored</th>
|
||||
<th>Duration</th>
|
||||
<th>Success rate</th>
|
||||
</tr>
|
||||
</thread>
|
||||
<tr>
|
||||
<td class="success">
|
||||
<a href="../classes/dev.freireservices.social_altruism.ChatQuickStartTest.html">ChatQuickStartTest</a>
|
||||
</td>
|
||||
<td>2</td>
|
||||
<td>0</td>
|
||||
<td>0</td>
|
||||
<td>0.944s</td>
|
||||
<td class="success">100%</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
<p>
|
||||
<div>
|
||||
<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
|
||||
<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
|
||||
</label>
|
||||
</div>Generated by
|
||||
<a href="http://www.gradle.org">Gradle 7.6</a> at 22 dic 2023, 9:02:23</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
21
build/resources/main/logback.xml
Normal file
21
build/resources/main/logback.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<!-- This is a development logging configuration that logs to standard out, for an example of a production
|
||||
logging config, see the Akka docs: https://doc.akka.io/docs/akka/2.6/typed/logging.html#logback -->
|
||||
<appender name="STDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>[%date{ISO8601}] [%level] [%logger] [%thread] [%X{akkaSource}] - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<queueSize>1024</queueSize>
|
||||
<neverBlock>true</neverBlock>
|
||||
<appender-ref ref="STDOUT" />
|
||||
</appender>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="ASYNC"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuite name="dev.freireservices.social_altruism.ChatQuickStartTest" tests="2" skipped="0" failures="0" errors="0" timestamp="2023-12-22T08:02:22" hostname="MacBook-Pro.local" time="0.952">
|
||||
<properties/>
|
||||
<testcase name="testActorGetsUserDenied" classname="dev.freireservices.social_altruism.ChatQuickStartTest" time="0.856"/>
|
||||
<testcase name="testGreeterActorSendingOfGreeting" classname="dev.freireservices.social_altruism.ChatQuickStartTest" time="0.088"/>
|
||||
<system-out><![CDATA[[2023-12-22 09:02:23,397] [INFO] [akka.event.slf4j.Slf4jLogger] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [] - Slf4jLogger started
|
||||
[2023-12-22 09:02:23,552] [ERROR] [akka.actor.testkit.typed.internal.ActorTestKitGuardian$$anonfun$handleSpawnException$1] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [akka://ChatQuickStartTest/user] - Spawn failed, props [EmptyProps]
|
||||
akka.actor.InvalidActorNameException: actor name [chatRoom] is not unique!
|
||||
at akka.actor.dungeon.ChildrenContainer$NormalChildrenContainer.reserve(ChildrenContainer.scala:134)
|
||||
at akka.actor.dungeon.Children.reserveChild(Children.scala:147)
|
||||
at akka.actor.dungeon.Children.reserveChild$(Children.scala:145)
|
||||
at akka.actor.ActorCell.reserveChild(ActorCell.scala:410)
|
||||
at akka.actor.dungeon.Children.makeChild(Children.scala:300)
|
||||
at akka.actor.dungeon.Children.actorOf(Children.scala:49)
|
||||
at akka.actor.dungeon.Children.actorOf$(Children.scala:48)
|
||||
at akka.actor.ActorCell.actorOf(ActorCell.scala:410)
|
||||
at akka.actor.typed.internal.adapter.ActorRefFactoryAdapter$.spawn(ActorRefFactoryAdapter.scala:55)
|
||||
at akka.actor.typed.internal.adapter.ActorContextAdapter.spawn(ActorContextAdapter.scala:73)
|
||||
at akka.actor.testkit.typed.internal.ActorTestKitGuardian$.$anonfun$testKitGuardian$1(TestKitUtils.scala:35)
|
||||
at akka.actor.typed.internal.BehaviorImpl$ReceiveBehavior.receive(BehaviorImpl.scala:136)
|
||||
at akka.actor.typed.Behavior$.interpret(Behavior.scala:282)
|
||||
at akka.actor.typed.Behavior$.interpretMessage(Behavior.scala:238)
|
||||
at akka.actor.typed.internal.InterceptorImpl$$anon$2.apply(InterceptorImpl.scala:57)
|
||||
at akka.actor.typed.internal.adapter.GuardianStopInterceptor.aroundReceive(GuardianStartupBehavior.scala:59)
|
||||
at akka.actor.typed.internal.InterceptorImpl.receive(InterceptorImpl.scala:85)
|
||||
at akka.actor.typed.Behavior$.interpret(Behavior.scala:282)
|
||||
at akka.actor.typed.Behavior$.interpretMessage(Behavior.scala:238)
|
||||
at akka.actor.typed.internal.adapter.ActorAdapter.handleMessage(ActorAdapter.scala:133)
|
||||
at akka.actor.typed.internal.adapter.ActorAdapter.aroundReceive(ActorAdapter.scala:109)
|
||||
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:579)
|
||||
at akka.actor.ActorCell.invoke(ActorCell.scala:547)
|
||||
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:270)
|
||||
at akka.dispatch.Mailbox.run(Mailbox.scala:231)
|
||||
at akka.dispatch.Mailbox.exec(Mailbox.scala:243)
|
||||
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
|
||||
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1311)
|
||||
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1840)
|
||||
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1806)
|
||||
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
|
||||
[2023-12-22 09:02:23,640] [INFO] [akka.actor.LocalActorRef] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [akka://ChatQuickStartTest/user/$a] - Message [dev.freireservices.social_altruism.ChatRoom$GetSession] to Actor[akka://ChatQuickStartTest/user/$a#-835521502] was not delivered. [1] dead letters encountered. If this is not an expected behavior then Actor[akka://ChatQuickStartTest/user/$a#-835521502] may have terminated unexpectedly. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
|
||||
[2023-12-22 09:02:23,665] [INFO] [akka.actor.CoordinatedShutdown] [ChatQuickStartTest-akka.actor.default-dispatcher-3] [CoordinatedShutdown(akka://ChatQuickStartTest)] - Running CoordinatedShutdown with reason [ActorSystemTerminateReason]
|
||||
]]></system-out>
|
||||
<system-err><![CDATA[]]></system-err>
|
||||
</testsuite>
|
BIN
build/test-results/test/binary/output.bin
Normal file
BIN
build/test-results/test/binary/output.bin
Normal file
Binary file not shown.
BIN
build/test-results/test/binary/output.bin.idx
Normal file
BIN
build/test-results/test/binary/output.bin.idx
Normal file
Binary file not shown.
BIN
build/test-results/test/binary/results.bin
Normal file
BIN
build/test-results/test/binary/results.bin
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/tmp/compileJava/previous-compilation-data.bin
Normal file
BIN
build/tmp/compileJava/previous-compilation-data.bin
Normal file
Binary file not shown.
Binary file not shown.
BIN
build/tmp/compileTestJava/previous-compilation-data.bin
Normal file
BIN
build/tmp/compileTestJava/previous-compilation-data.bin
Normal file
Binary file not shown.
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
245
gradlew
vendored
Normal file
245
gradlew
vendored
Normal file
@ -0,0 +1,245 @@
|
||||
#!/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
|
||||
|
||||
# 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
|
||||
|
||||
|
||||
# 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"'
|
||||
|
||||
# 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" "$@"
|
92
gradlew.bat
vendored
Normal file
92
gradlew.bat
vendored
Normal file
@ -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
|
71
pom.xml
Normal file
71
pom.xml
Normal file
@ -0,0 +1,71 @@
|
||||
<!-- #build-sample -->
|
||||
<project>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>hello-akka-java</groupId>
|
||||
<artifactId>app</artifactId>
|
||||
<version>1.0</version>
|
||||
|
||||
<properties>
|
||||
<akka.version>2.9.0</akka.version>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>akka-repository</id>
|
||||
<name>Akka library repository</name>
|
||||
<url>https://repo.akka.io/maven</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.typesafe.akka</groupId>
|
||||
<artifactId>akka-actor-typed_2.13</artifactId>
|
||||
<version>${akka.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>1.2.11</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.typesafe.akka</groupId>
|
||||
<artifactId>akka-actor-testkit-typed_2.13</artifactId>
|
||||
<version>${akka.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.1</version>
|
||||
<configuration>
|
||||
<source>17</source>
|
||||
<target>17</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>exec-maven-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<configuration>
|
||||
<executable>java</executable>
|
||||
<arguments>
|
||||
<argument>-classpath</argument>
|
||||
<classpath />
|
||||
<argument>dev.freireservices.social_altruism.ChatQuickStart</argument>
|
||||
</arguments>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
1
project/build.properties
Normal file
1
project/build.properties
Normal file
@ -0,0 +1 @@
|
||||
sbt.version=1.9.8
|
605
sbt-dist/bin/sbt
Executable file
605
sbt-dist/bin/sbt
Executable file
@ -0,0 +1,605 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set +e
|
||||
declare -a residual_args
|
||||
declare -a java_args
|
||||
declare -a scalac_args
|
||||
declare -a sbt_commands
|
||||
declare -a sbt_options
|
||||
declare -a print_version
|
||||
declare -a print_sbt_version
|
||||
declare -a print_sbt_script_version
|
||||
declare java_cmd=java
|
||||
declare java_version
|
||||
declare init_sbt_version=_to_be_replaced
|
||||
declare sbt_default_mem=1024
|
||||
declare -r default_sbt_opts=""
|
||||
declare -r default_java_opts="-Dfile.encoding=UTF-8"
|
||||
declare sbt_verbose=
|
||||
declare sbt_debug=
|
||||
|
||||
### ------------------------------- ###
|
||||
### Helper methods for BASH scripts ###
|
||||
### ------------------------------- ###
|
||||
|
||||
# Bash reimplementation of realpath to return the absolute path
|
||||
realpathish () {
|
||||
(
|
||||
TARGET_FILE="$1"
|
||||
FIX_CYGPATH="$2"
|
||||
|
||||
cd "$(dirname "$TARGET_FILE")"
|
||||
TARGET_FILE=$(basename "$TARGET_FILE")
|
||||
|
||||
COUNT=0
|
||||
while [ -L "$TARGET_FILE" -a $COUNT -lt 100 ]
|
||||
do
|
||||
TARGET_FILE=$(readlink "$TARGET_FILE")
|
||||
cd "$(dirname "$TARGET_FILE")"
|
||||
TARGET_FILE=$(basename "$TARGET_FILE")
|
||||
COUNT=$(($COUNT + 1))
|
||||
done
|
||||
|
||||
# make sure we grab the actual windows path, instead of cygwin's path.
|
||||
if [[ "x$FIX_CYGPATH" != "x" ]]; then
|
||||
echo "$(cygwinpath "$(pwd -P)/$TARGET_FILE")"
|
||||
else
|
||||
echo "$(pwd -P)/$TARGET_FILE"
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
||||
# Uses uname to detect if we're in the odd cygwin environment.
|
||||
is_cygwin() {
|
||||
local os=$(uname -s)
|
||||
case "$os" in
|
||||
CYGWIN*) return 0 ;;
|
||||
MINGW*) return 0 ;;
|
||||
MSYS*) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# TODO - Use nicer bash-isms here.
|
||||
CYGWIN_FLAG=$(if is_cygwin; then echo true; else echo false; fi)
|
||||
|
||||
# This can fix cygwin style /cygdrive paths so we get the
|
||||
# windows style paths.
|
||||
cygwinpath() {
|
||||
local file="$1"
|
||||
if [[ "$CYGWIN_FLAG" == "true" ]]; then #"
|
||||
echo $(cygpath -w $file)
|
||||
else
|
||||
echo $file
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
declare -r sbt_bin_dir="$(dirname "$(realpathish "$0")")"
|
||||
declare -r sbt_home="$(dirname "$sbt_bin_dir")"
|
||||
|
||||
echoerr () {
|
||||
echo 1>&2 "$@"
|
||||
}
|
||||
vlog () {
|
||||
[[ $sbt_verbose || $sbt_debug ]] && echoerr "$@"
|
||||
}
|
||||
dlog () {
|
||||
[[ $sbt_debug ]] && echoerr "$@"
|
||||
}
|
||||
|
||||
jar_file () {
|
||||
echo "$(cygwinpath "${sbt_home}/bin/sbt-launch.jar")"
|
||||
}
|
||||
|
||||
acquire_sbt_jar () {
|
||||
sbt_jar="$(jar_file)"
|
||||
|
||||
if [[ ! -f "$sbt_jar" ]]; then
|
||||
echoerr "Could not find launcher jar: $sbt_jar"
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
rt_export_file () {
|
||||
echo "${sbt_bin_dir}/java9-rt-export.jar"
|
||||
}
|
||||
|
||||
# execRunner should be called only once to give up control to java
|
||||
execRunner () {
|
||||
# print the arguments one to a line, quoting any containing spaces
|
||||
[[ $sbt_verbose || $sbt_debug ]] && echo "# Executing command line:" && {
|
||||
for arg; do
|
||||
if printf "%s\n" "$arg" | grep -q ' '; then
|
||||
printf "\"%s\"\n" "$arg"
|
||||
else
|
||||
printf "%s\n" "$arg"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
}
|
||||
|
||||
if [[ "$CYGWIN_FLAG" == "true" ]]; then
|
||||
# In cygwin we loose the ability to re-hook stty if exec is used
|
||||
# https://github.com/sbt/sbt-launcher-package/issues/53
|
||||
"$@"
|
||||
else
|
||||
exec "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
addJava () {
|
||||
dlog "[addJava] arg = '$1'"
|
||||
java_args=( "${java_args[@]}" "$1" )
|
||||
}
|
||||
addSbt () {
|
||||
dlog "[addSbt] arg = '$1'"
|
||||
sbt_commands=( "${sbt_commands[@]}" "$1" )
|
||||
}
|
||||
addResidual () {
|
||||
dlog "[residual] arg = '$1'"
|
||||
residual_args=( "${residual_args[@]}" "$1" )
|
||||
}
|
||||
addDebugger () {
|
||||
addJava "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$1"
|
||||
}
|
||||
|
||||
addMemory () {
|
||||
dlog "[addMemory] arg = '$1'"
|
||||
# evict memory related options
|
||||
local xs=("${java_args[@]}")
|
||||
java_args=()
|
||||
for i in "${xs[@]}"; do
|
||||
if ! [[ "${i}" == *-Xmx* ]] && ! [[ "${i}" == *-Xms* ]] && ! [[ "${i}" == *-XX:MaxPermSize* ]] && ! [[ "${i}" == *-XX:MaxMetaspaceSize* ]] && ! [[ "${i}" == *-XX:ReservedCodeCacheSize* ]]; then
|
||||
java_args+=("${i}")
|
||||
fi
|
||||
done
|
||||
local ys=("${sbt_options[@]}")
|
||||
sbt_options=()
|
||||
for i in "${ys[@]}"; do
|
||||
if ! [[ "${i}" == *-Xmx* ]] && ! [[ "${i}" == *-Xms* ]] && ! [[ "${i}" == *-XX:MaxPermSize* ]] && ! [[ "${i}" == *-XX:MaxMetaspaceSize* ]] && ! [[ "${i}" == *-XX:ReservedCodeCacheSize* ]]; then
|
||||
sbt_options+=("${i}")
|
||||
fi
|
||||
done
|
||||
# a ham-fisted attempt to move some memory settings in concert
|
||||
local mem=$1
|
||||
local codecache=$(( $mem / 8 ))
|
||||
(( $codecache > 128 )) || codecache=128
|
||||
(( $codecache < 512 )) || codecache=512
|
||||
local class_metadata_size=$(( $codecache * 2 ))
|
||||
if [[ -z $java_version ]]; then
|
||||
java_version=$(jdk_version)
|
||||
fi
|
||||
|
||||
addJava "-Xms${mem}m"
|
||||
addJava "-Xmx${mem}m"
|
||||
addJava "-Xss4M"
|
||||
addJava "-XX:ReservedCodeCacheSize=${codecache}m"
|
||||
(( $java_version >= 8 )) || addJava "-XX:MaxPermSize=${class_metadata_size}m"
|
||||
}
|
||||
|
||||
addDefaultMemory() {
|
||||
# if we detect any of these settings in ${JAVA_OPTS} or ${JAVA_TOOL_OPTIONS} we need to NOT output our settings.
|
||||
# The reason is the Xms/Xmx, if they don't line up, cause errors.
|
||||
if [[ "${java_args[@]}" == *-Xmx* ]] || \
|
||||
[[ "${java_args[@]}" == *-Xms* ]] || \
|
||||
[[ "${java_args[@]}" == *-XX:+UseCGroupMemoryLimitForHeap* ]] || \
|
||||
[[ "${java_args[@]}" == *-XX:MaxRAM* ]] || \
|
||||
[[ "${java_args[@]}" == *-XX:InitialRAMPercentage* ]] || \
|
||||
[[ "${java_args[@]}" == *-XX:MaxRAMPercentage* ]] || \
|
||||
[[ "${java_args[@]}" == *-XX:MinRAMPercentage* ]]; then
|
||||
:
|
||||
elif [[ "${JAVA_TOOL_OPTIONS}" == *-Xmx* ]] || \
|
||||
[[ "${JAVA_TOOL_OPTIONS}" == *-Xms* ]] || \
|
||||
[[ "${JAVA_TOOL_OPTIONS}" == *-XX:+UseCGroupMemoryLimitForHeap* ]] || \
|
||||
[[ "${JAVA_TOOL_OPTIONS}" == *-XX:MaxRAM* ]] || \
|
||||
[[ "${JAVA_TOOL_OPTIONS}" == *-XX:InitialRAMPercentage* ]] || \
|
||||
[[ "${JAVA_TOOL_OPTIONS}" == *-XX:MaxRAMPercentage* ]] || \
|
||||
[[ "${JAVA_TOOL_OPTIONS}" == *-XX:MinRAMPercentage* ]] ; then
|
||||
:
|
||||
elif [[ "${sbt_options[@]}" == *-Xmx* ]] || \
|
||||
[[ "${sbt_options[@]}" == *-Xms* ]] || \
|
||||
[[ "${sbt_options[@]}" == *-XX:+UseCGroupMemoryLimitForHeap* ]] || \
|
||||
[[ "${sbt_options[@]}" == *-XX:MaxRAM* ]] || \
|
||||
[[ "${sbt_options[@]}" == *-XX:InitialRAMPercentage* ]] || \
|
||||
[[ "${sbt_options[@]}" == *-XX:MaxRAMPercentage* ]] || \
|
||||
[[ "${sbt_options[@]}" == *-XX:MinRAMPercentage* ]] ; then
|
||||
:
|
||||
else
|
||||
addMemory $sbt_default_mem
|
||||
fi
|
||||
}
|
||||
|
||||
require_arg () {
|
||||
local type="$1"
|
||||
local opt="$2"
|
||||
local arg="$3"
|
||||
if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then
|
||||
echo "$opt requires <$type> argument"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
is_function_defined() {
|
||||
declare -f "$1" > /dev/null
|
||||
}
|
||||
|
||||
# parses JDK version from the -version output line.
|
||||
# 8 for 1.8.0_nn, 9 for 9-ea etc, and "no_java" for undetected
|
||||
jdk_version() {
|
||||
local result
|
||||
local lines=$("$java_cmd" -Xms32M -Xmx32M -version 2>&1 | tr '\r' '\n')
|
||||
local IFS=$'\n'
|
||||
for line in $lines; do
|
||||
if [[ (-z $result) && ($line = *"version \""*) ]]
|
||||
then
|
||||
local ver=$(echo $line | sed -e 's/.*version "\(.*\)"\(.*\)/\1/; 1q')
|
||||
# on macOS sed doesn't support '?'
|
||||
if [[ $ver = "1."* ]]
|
||||
then
|
||||
result=$(echo $ver | sed -e 's/1\.\([0-9]*\)\(.*\)/\1/; 1q')
|
||||
else
|
||||
result=$(echo $ver | sed -e 's/\([0-9]*\)\(.*\)/\1/; 1q')
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [[ -z $result ]]
|
||||
then
|
||||
result=no_java
|
||||
fi
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
# Extracts the preloaded directory from either -Dsbt.preloaded or -Dsbt.global.base
|
||||
# properties by looking at:
|
||||
# - _JAVA_OPTIONS environment variable,
|
||||
# - SBT_OPTS environment variable,
|
||||
# - JAVA_OPTS environment variable and
|
||||
# - properties set by command-line options
|
||||
# in that order. The last one will be chosen such that `sbt.preloaded` is
|
||||
# always preferred over `sbt.global.base`.
|
||||
getPreloaded() {
|
||||
local -a _java_options_array
|
||||
local -a sbt_opts_array
|
||||
local -a java_opts_array
|
||||
read -a _java_options_array <<< "$_JAVA_OPTIONS"
|
||||
read -a sbt_opts_array <<< "$SBT_OPTS"
|
||||
read -a java_opts_array <<< "$JAVA_OPTS"
|
||||
|
||||
local args_to_check=(
|
||||
"${_java_options_array[@]}"
|
||||
"${sbt_opts_array[@]}"
|
||||
"${java_opts_array[@]}"
|
||||
"${java_args[@]}")
|
||||
local via_global_base="$HOME/.sbt/preloaded"
|
||||
local via_explicit=""
|
||||
|
||||
for opt in "${args_to_check[@]}"; do
|
||||
if [[ "$opt" == -Dsbt.preloaded=* ]]; then
|
||||
via_explicit="${opt#-Dsbt.preloaded=}"
|
||||
elif [[ "$opt" == -Dsbt.global.base=* ]]; then
|
||||
via_global_base="${opt#-Dsbt.global.base=}/preloaded"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "${via_explicit:-${via_global_base}}"
|
||||
}
|
||||
|
||||
syncPreloaded() {
|
||||
local source_preloaded="$sbt_home/lib/local-preloaded/"
|
||||
local target_preloaded="$(getPreloaded)"
|
||||
if [[ "$init_sbt_version" == "" ]]; then
|
||||
# FIXME: better $init_sbt_version detection
|
||||
init_sbt_version="$(ls -1 "$source_preloaded/org/scala-sbt/sbt/")"
|
||||
fi
|
||||
[[ -f "$target_preloaded/org/scala-sbt/sbt/$init_sbt_version/" ]] || {
|
||||
# lib/local-preloaded exists (This is optional)
|
||||
[[ -d "$source_preloaded" ]] && {
|
||||
command -v rsync >/dev/null 2>&1 && {
|
||||
mkdir -p "$target_preloaded"
|
||||
rsync --recursive --links --perms --times --ignore-existing "$source_preloaded" "$target_preloaded" || true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Detect that we have java installed.
|
||||
checkJava() {
|
||||
local required_version="$1"
|
||||
# Now check to see if it's a good enough version
|
||||
local good_enough="$(expr $java_version ">=" $required_version)"
|
||||
if [[ "$java_version" == "" ]]; then
|
||||
echo
|
||||
echo "No Java Development Kit (JDK) installation was detected."
|
||||
echo Please go to http://www.oracle.com/technetwork/java/javase/downloads/ and download.
|
||||
echo
|
||||
exit 1
|
||||
elif [[ "$good_enough" != "1" ]]; then
|
||||
echo
|
||||
echo "The Java Development Kit (JDK) installation you have is not up to date."
|
||||
echo $script_name requires at least version $required_version+, you have
|
||||
echo version $java_version
|
||||
echo
|
||||
echo Please go to http://www.oracle.com/technetwork/java/javase/downloads/ and download
|
||||
echo a valid JDK and install before running $script_name.
|
||||
echo
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
copyRt() {
|
||||
local at_least_9="$(expr $java_version ">=" 9)"
|
||||
if [[ "$at_least_9" == "1" ]]; then
|
||||
rtexport=$(rt_export_file)
|
||||
# The grep for java9-rt-ext- matches the filename prefix printed in Export.java
|
||||
java9_ext=$("$java_cmd" "${sbt_options[@]}" "${java_args[@]}" \
|
||||
-jar "$rtexport" --rt-ext-dir | grep java9-rt-ext-)
|
||||
java9_rt=$(echo "$java9_ext/rt.jar")
|
||||
vlog "[copyRt] java9_rt = '$java9_rt'"
|
||||
if [[ ! -f "$java9_rt" ]]; then
|
||||
echo copying runtime jar...
|
||||
mkdir -p "$java9_ext"
|
||||
"$java_cmd" \
|
||||
"${sbt_options[@]}" \
|
||||
"${java_args[@]}" \
|
||||
-jar "$rtexport" \
|
||||
"${java9_rt}"
|
||||
fi
|
||||
addJava "-Dscala.ext.dirs=${java9_ext}"
|
||||
fi
|
||||
}
|
||||
|
||||
run() {
|
||||
java_args=($JAVA_OPTS)
|
||||
sbt_options0=(${SBT_OPTS:-$default_sbt_opts})
|
||||
|
||||
# Split SBT_OPTS into options/commands
|
||||
miniscript=$(map_args "${sbt_options0[@]}") && eval "${miniscript/options/sbt_options}" && \
|
||||
eval "${miniscript/commands/sbt_additional_commands}"
|
||||
|
||||
# Combine command line options/commands and commands from SBT_OPTS
|
||||
miniscript=$(map_args "$@") && eval "${miniscript/options/cli_options}" && eval "${miniscript/commands/cli_commands}"
|
||||
args1=( "${cli_options[@]}" "${cli_commands[@]}" "${sbt_additional_commands[@]}" )
|
||||
|
||||
# process the combined args, then reset "$@" to the residuals
|
||||
process_args "${args1[@]}"
|
||||
vlog "[sbt_options] $(declare -p sbt_options)"
|
||||
|
||||
addDefaultMemory
|
||||
set -- "${residual_args[@]}"
|
||||
argumentCount=$#
|
||||
|
||||
# Copy preloaded repo to user's preloaded directory
|
||||
syncPreloaded
|
||||
|
||||
# no jar? download it.
|
||||
[[ -f "$sbt_jar" ]] || acquire_sbt_jar "$sbt_version" || {
|
||||
# still no jar? uh-oh.
|
||||
echo "Download failed. Obtain the sbt-launch.jar manually and place it at $sbt_jar"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# TODO - java check should be configurable...
|
||||
checkJava "6"
|
||||
|
||||
# Java 9 support
|
||||
copyRt
|
||||
|
||||
# If we're in cygwin, we should use the windows config, and terminal hacks
|
||||
if [[ "$CYGWIN_FLAG" == "true" ]]; then #"
|
||||
stty -icanon min 1 -echo > /dev/null 2>&1
|
||||
addJava "-Djline.terminal=jline.UnixTerminal"
|
||||
addJava "-Dsbt.cygwin=true"
|
||||
fi
|
||||
|
||||
if [[ $print_sbt_version ]]; then
|
||||
execRunner "$java_cmd" -jar "$sbt_jar" "sbtVersion" | tail -1 | sed -e 's/\[info\]//g'
|
||||
elif [[ $print_sbt_script_version ]]; then
|
||||
echo "$init_sbt_version"
|
||||
elif [[ $print_version ]]; then
|
||||
execRunner "$java_cmd" -jar "$sbt_jar" "sbtVersion" | tail -1 | sed -e 's/\[info\]/sbt version in this project:/g'
|
||||
echo "sbt script version: $init_sbt_version"
|
||||
else
|
||||
# run sbt
|
||||
execRunner "$java_cmd" \
|
||||
"${java_args[@]}" \
|
||||
"${sbt_options[@]}" \
|
||||
-jar "$sbt_jar" \
|
||||
"${sbt_commands[@]}" \
|
||||
"${residual_args[@]}"
|
||||
fi
|
||||
|
||||
exit_code=$?
|
||||
|
||||
# Clean up the terminal from cygwin hacks.
|
||||
if [[ "$CYGWIN_FLAG" == "true" ]]; then #"
|
||||
stty icanon echo > /dev/null 2>&1
|
||||
fi
|
||||
exit $exit_code
|
||||
}
|
||||
|
||||
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
|
||||
declare -r sbt_opts_file=".sbtopts"
|
||||
declare -r etc_sbt_opts_file="/etc/sbt/sbtopts"
|
||||
# this allows /etc/sbt/sbtopts location to be changed
|
||||
declare -r etc_file="${SBT_ETC_FILE:-$etc_sbt_opts_file}"
|
||||
declare -r dist_sbt_opts_file="${sbt_home}/conf/sbtopts"
|
||||
declare -r win_sbt_opts_file="${sbt_home}/conf/sbtconfig.txt"
|
||||
|
||||
usage() {
|
||||
cat <<EOM
|
||||
Usage: `basename "$0"` [options]
|
||||
|
||||
-h | --help print this message
|
||||
-v | --verbose this runner is chattier
|
||||
-V | --version print sbt version information
|
||||
--numeric-version print the numeric sbt version (sbt sbtVersion)
|
||||
--script-version print the version of sbt script
|
||||
-d | --debug set sbt log level to debug
|
||||
-debug-inc | --debug-inc
|
||||
enable extra debugging for the incremental debugger
|
||||
--no-colors disable ANSI color codes
|
||||
--color=auto|always|true|false|never
|
||||
enable or disable ANSI color codes (sbt 1.3 and above)
|
||||
--supershell=auto|always|true|false|never
|
||||
enable or disable supershell (sbt 1.3 and above)
|
||||
--traces generate Trace Event report on shutdown (sbt 1.3 and above)
|
||||
--timings display task timings report on shutdown
|
||||
--sbt-create start sbt even if current directory contains no sbt project
|
||||
--sbt-dir <path> path to global settings/plugins directory (default: ~/.sbt)
|
||||
--sbt-boot <path> path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
|
||||
--ivy <path> path to local Ivy repository (default: ~/.ivy2)
|
||||
--mem <integer> set memory options (default: $sbt_default_mem)
|
||||
--no-share use all local caches; no sharing
|
||||
--no-global uses global caches, but does not use global ~/.sbt directory.
|
||||
--jvm-debug <port> Turn on JVM debugging, open at the given port.
|
||||
--batch disable interactive mode
|
||||
|
||||
# sbt version (default: from project/build.properties if present, else latest release)
|
||||
--sbt-version <version> use the specified version of sbt
|
||||
--sbt-jar <path> use the specified jar as the sbt launcher
|
||||
|
||||
# java version (default: java from PATH, currently $(java -version 2>&1 | grep version))
|
||||
--java-home <path> alternate JAVA_HOME
|
||||
|
||||
# jvm options and output control
|
||||
JAVA_OPTS environment variable, if unset uses "$default_java_opts"
|
||||
.jvmopts if this file exists in the current directory, its contents
|
||||
are appended to JAVA_OPTS
|
||||
SBT_OPTS environment variable, if unset uses "$default_sbt_opts"
|
||||
.sbtopts if this file exists in the current directory, its contents
|
||||
are prepended to the runner args
|
||||
/etc/sbt/sbtopts if this file exists, it is prepended to the runner args
|
||||
-Dkey=val pass -Dkey=val directly to the java runtime
|
||||
-J-X pass option -X directly to the java runtime
|
||||
(-J is stripped)
|
||||
-S-X add -X to sbt's scalacOptions (-S is stripped)
|
||||
|
||||
In the case of duplicated or conflicting options, the order above
|
||||
shows precedence: JAVA_OPTS lowest, command line options highest.
|
||||
EOM
|
||||
}
|
||||
|
||||
process_my_args () {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-batch|--batch) exec </dev/null && shift ;; #>
|
||||
|
||||
-sbt-create|--sbt-create) sbt_create=true && shift ;;
|
||||
|
||||
new) sbt_new=true && addResidual "$1" && shift ;;
|
||||
|
||||
*) addResidual "$1" && shift ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Now, ensure sbt version is used.
|
||||
[[ "${sbt_version}XXX" != "XXX" ]] && addJava "-Dsbt.version=$sbt_version"
|
||||
|
||||
# Confirm a user's intent if the current directory does not look like an sbt
|
||||
# top-level directory and neither the -sbt-create option nor the "new"
|
||||
# command was given.
|
||||
[[ -f ./build.sbt || -d ./project || -n "$sbt_create" || -n "$sbt_new" ]] || {
|
||||
echo "[warn] Neither build.sbt nor a 'project' directory in the current directory: $(pwd)"
|
||||
while true; do
|
||||
echo 'c) continue'
|
||||
echo 'q) quit'
|
||||
|
||||
read -p '? ' || exit 1
|
||||
case "$REPLY" in
|
||||
c|C) break ;;
|
||||
q|Q) exit 1 ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
## map over argument array. this is used to process both command line arguments and SBT_OPTS
|
||||
map_args () {
|
||||
local options=()
|
||||
local commands=()
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-no-colors|--no-colors) options=( "${options[@]}" "-Dsbt.log.noformat=true" ) && shift ;;
|
||||
-timings|--timings) options=( "${options[@]}" "-Dsbt.task.timings=true" "-Dsbt.task.timings.on.shutdown=true" ) && shift ;;
|
||||
-traces|--traces) options=( "${options[@]}" "-Dsbt.traces=true" ) && shift ;;
|
||||
--supershell=*) options=( "${options[@]}" "-Dsbt.supershell=${1:13}" ) && shift ;;
|
||||
-supershell=*) options=( "${options[@]}" "-Dsbt.supershell=${1:12}" ) && shift ;;
|
||||
--color=*) options=( "${options[@]}" "-Dsbt.color=${1:8}" ) && shift ;;
|
||||
-color=*) options=( "${options[@]}" "-Dsbt.color=${1:7}" ) && shift ;;
|
||||
-no-share|--no-share) options=( "${options[@]}" "$noshare_opts" ) && shift ;;
|
||||
-no-global|--no-global) options=( "${options[@]}" "-Dsbt.global.base=$(pwd)/project/.sbtboot" ) && shift ;;
|
||||
-sbt-boot|--sbt-boot) require_arg path "$1" "$2" && options=( "${options[@]}" "-Dsbt.boot.directory=$2" ) && shift 2 ;;
|
||||
-sbt-dir|--sbt-dir) require_arg path "$1" "$2" && options=( "${options[@]}" "-Dsbt.global.base=$2" ) && shift 2 ;;
|
||||
-debug|--debug) commands=( "${commands[@]}" "-debug" ) && shift ;;
|
||||
-debug-inc|--debug-inc) options=( "${options[@]}" "-Dxsbt.inc.debug=true" ) && shift ;;
|
||||
*) options=( "${options[@]}" "$1" ) && shift ;;
|
||||
esac
|
||||
done
|
||||
declare -p options
|
||||
declare -p commands
|
||||
}
|
||||
|
||||
process_args () {
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
-h|-help|--help) usage; exit 1 ;;
|
||||
-v|-verbose|--verbose) sbt_verbose=1 && shift ;;
|
||||
-V|-version|--version) print_version=1 && shift ;;
|
||||
--numeric-version) print_sbt_version=1 && shift ;;
|
||||
--script-version) print_sbt_script_version=1 && shift ;;
|
||||
-d|-debug|--debug) sbt_debug=1 && addSbt "-debug" && shift ;;
|
||||
|
||||
-ivy|--ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;;
|
||||
-mem|--mem) require_arg integer "$1" "$2" && addMemory "$2" && shift 2 ;;
|
||||
-jvm-debug|--jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;;
|
||||
-batch|--batch) exec </dev/null && shift ;;
|
||||
|
||||
-sbt-jar|--sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;;
|
||||
-sbt-version|--sbt-version) require_arg version "$1" "$2" && sbt_version="$2" && shift 2 ;;
|
||||
-java-home|--java-home) require_arg path "$1" "$2" &&
|
||||
java_cmd="$2/bin/java" &&
|
||||
export JAVA_HOME="$2" &&
|
||||
export JDK_HOME="$2" &&
|
||||
export PATH="$2/bin:$PATH" &&
|
||||
shift 2 ;;
|
||||
|
||||
"-D*"|-D*) addJava "$1" && shift ;;
|
||||
-J*) addJava "${1:2}" && shift ;;
|
||||
*) addResidual "$1" && shift ;;
|
||||
esac
|
||||
done
|
||||
|
||||
is_function_defined process_my_args && {
|
||||
myargs=("${residual_args[@]}")
|
||||
residual_args=()
|
||||
process_my_args "${myargs[@]}"
|
||||
}
|
||||
|
||||
java_version="$(jdk_version)"
|
||||
vlog "[process_args] java_version = '$java_version'"
|
||||
}
|
||||
|
||||
loadConfigFile() {
|
||||
# Make sure the last line is read even if it doesn't have a terminating \n
|
||||
cat "$1" | sed $'/^\#/d;s/\r$//' | while read -r line || [[ -n "$line" ]]; do
|
||||
eval echo $line
|
||||
done
|
||||
}
|
||||
|
||||
# Here we pull in the default settings configuration.
|
||||
[[ -f "$dist_sbt_opts_file" ]] && set -- $(loadConfigFile "$dist_sbt_opts_file") "$@"
|
||||
|
||||
# Here we pull in the global settings configuration.
|
||||
[[ -f "$etc_file" ]] && set -- $(loadConfigFile "$etc_file") "$@"
|
||||
|
||||
# Pull in the project-level config file, if it exists.
|
||||
[[ -f "$sbt_opts_file" ]] && set -- $(loadConfigFile "$sbt_opts_file") "$@"
|
||||
|
||||
# Pull in the project-level java config, if it exists.
|
||||
[[ -f ".jvmopts" ]] && export JAVA_OPTS="$JAVA_OPTS $(loadConfigFile .jvmopts)"
|
||||
|
||||
# Pull in default JAVA_OPTS
|
||||
[[ -z "${JAVA_OPTS// }" ]] && export JAVA_OPTS="$default_java_opts"
|
||||
|
||||
run "$@"
|
BIN
sbt-dist/bin/sbt-launch.jar
Normal file
BIN
sbt-dist/bin/sbt-launch.jar
Normal file
Binary file not shown.
902
sbt-dist/bin/sbt.bat
Normal file
902
sbt-dist/bin/sbt.bat
Normal file
@ -0,0 +1,902 @@
|
||||
@REM SBT launcher script
|
||||
@REM
|
||||
@REM Environment:
|
||||
@REM JAVA_HOME - location of a JDK home dir (mandatory)
|
||||
@REM SBT_OPTS - JVM options (optional)
|
||||
@REM Configuration:
|
||||
@REM sbtconfig.txt found in the SBT_HOME.
|
||||
|
||||
@REM ZOMG! We need delayed expansion to build up CFG_OPTS later
|
||||
@setlocal enabledelayedexpansion
|
||||
|
||||
@echo off
|
||||
set SBT_BIN_DIR=%~dp0
|
||||
if not defined SBT_HOME for %%I in ("!SBT_BIN_DIR!\..") do set "SBT_HOME=%%~fI"
|
||||
|
||||
set SBT_ARGS=
|
||||
set _JAVACMD=
|
||||
set _SBT_OPTS=
|
||||
set _JAVA_OPTS=
|
||||
|
||||
set init_sbt_version=_to_be_replaced
|
||||
set sbt_default_mem=1024
|
||||
set default_sbt_opts=
|
||||
set default_java_opts=-Dfile.encoding=UTF-8
|
||||
set sbt_jar=
|
||||
|
||||
set sbt_args_print_version=
|
||||
set sbt_args_print_sbt_version=
|
||||
set sbt_args_print_sbt_script_version=
|
||||
set sbt_args_verbose=
|
||||
set sbt_args_debug=
|
||||
set sbt_args_debug_inc=
|
||||
set sbt_args_batch=
|
||||
set sbt_args_color=
|
||||
set sbt_args_no_colors=
|
||||
set sbt_args_no_global=
|
||||
set sbt_args_no_share=
|
||||
set sbt_args_sbt_jar=
|
||||
set sbt_args_ivy=
|
||||
set sbt_args_supershell=
|
||||
set sbt_args_timings=
|
||||
set sbt_args_traces=
|
||||
set sbt_args_sbt_create=
|
||||
set sbt_args_sbt_dir=
|
||||
set sbt_args_sbt_version=
|
||||
set sbt_args_mem=
|
||||
|
||||
rem users can set SBT_OPTS via .sbtopts
|
||||
if exist .sbtopts for /F %%A in (.sbtopts) do (
|
||||
set _sbtopts_line=%%A
|
||||
if not "!_sbtopts_line:~0,1!" == "#" (
|
||||
if defined _SBT_OPTS (
|
||||
set _SBT_OPTS=!_SBT_OPTS! %%A
|
||||
) else (
|
||||
set _SBT_OPTS=%%A
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
rem TODO: remove/deprecate sbtconfig.txt and parse the sbtopts files
|
||||
|
||||
rem FIRST we load the config file of extra options.
|
||||
set SBT_CONFIG=!SBT_HOME!\conf\sbtconfig.txt
|
||||
set SBT_CFG_OPTS=
|
||||
for /F "tokens=* eol=# usebackq delims=" %%i in ("!SBT_CONFIG!") do (
|
||||
set DO_NOT_REUSE_ME=%%i
|
||||
rem ZOMG (Part #2) WE use !! here to delay the expansion of
|
||||
rem SBT_CFG_OPTS, otherwise it remains "" for this loop.
|
||||
set SBT_CFG_OPTS=!SBT_CFG_OPTS! !DO_NOT_REUSE_ME!
|
||||
)
|
||||
|
||||
rem poor man's jenv (which is not available on Windows)
|
||||
if defined JAVA_HOMES (
|
||||
if exist .java-version for /F %%A in (.java-version) do (
|
||||
set JAVA_HOME=%JAVA_HOMES%\%%A
|
||||
set JDK_HOME=%JAVA_HOMES%\%%A
|
||||
)
|
||||
)
|
||||
|
||||
rem must set PATH or wrong javac is used for java projects
|
||||
if defined JAVA_HOME set "PATH=%JAVA_HOME%\bin;%PATH%"
|
||||
|
||||
rem We use the value of the JAVACMD environment variable if defined
|
||||
if defined JAVACMD set "_JAVACMD=%JAVACMD%"
|
||||
|
||||
rem remove quotes
|
||||
if defined _JAVACMD set _JAVACMD=!_JAVACMD:"=!
|
||||
|
||||
if not defined _JAVACMD (
|
||||
if not "%JAVA_HOME%" == "" (
|
||||
if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe"
|
||||
)
|
||||
)
|
||||
|
||||
if not defined _JAVACMD set _JAVACMD=java
|
||||
|
||||
rem users can set JAVA_OPTS via .jvmopts (sbt-extras style)
|
||||
if exist .jvmopts for /F %%A in (.jvmopts) do (
|
||||
set _jvmopts_line=%%A
|
||||
if not "!_jvmopts_line:~0,1!" == "#" (
|
||||
if defined _JAVA_OPTS (
|
||||
set _JAVA_OPTS=!_JAVA_OPTS! %%A
|
||||
) else (
|
||||
set _JAVA_OPTS=%%A
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
|
||||
if not defined _JAVA_OPTS if defined JAVA_OPTS set _JAVA_OPTS=%JAVA_OPTS%
|
||||
if not defined _JAVA_OPTS if defined default_java_opts set _JAVA_OPTS=!default_java_opts!
|
||||
|
||||
rem We use the value of the SBT_OPTS environment variable if defined, rather than the config.
|
||||
if not defined _SBT_OPTS if defined SBT_OPTS set _SBT_OPTS=%SBT_OPTS%
|
||||
if not defined _SBT_OPTS if defined SBT_CFG_OPTS set _SBT_OPTS=!SBT_CFG_OPTS!
|
||||
if not defined _SBT_OPTS if defined default_sbt_opts set _SBT_OPTS=!default_sbt_opts!
|
||||
|
||||
:args_loop
|
||||
shift
|
||||
|
||||
if "%~0" == "" goto args_end
|
||||
set g=%~0
|
||||
|
||||
rem make sure the sbt_args_debug gets set first incase any argument parsing uses :dlog
|
||||
if "%~0" == "-d" set _debug_arg=true
|
||||
if "%~0" == "--debug" set _debug_arg=true
|
||||
|
||||
if defined _debug_arg (
|
||||
set _debug_arg=
|
||||
set sbt_args_debug=1
|
||||
set SBT_ARGS=-debug !SBT_ARGS!
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-h" goto usage
|
||||
if "%~0" == "-help" goto usage
|
||||
if "%~0" == "--help" goto usage
|
||||
|
||||
if "%~0" == "-v" set _verbose_arg=true
|
||||
if "%~0" == "-verbose" set _verbose_arg=true
|
||||
if "%~0" == "--verbose" set _verbose_arg=true
|
||||
|
||||
if defined _verbose_arg (
|
||||
set _verbose_arg=
|
||||
set sbt_args_verbose=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-V" set _version_arg=true
|
||||
if "%~0" == "-version" set _version_arg=true
|
||||
if "%~0" == "--version" set _version_arg=true
|
||||
|
||||
if defined _version_arg (
|
||||
set _version_arg=
|
||||
set sbt_args_print_version=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-batch" set _batch_arg=true
|
||||
if "%~0" == "--batch" set _batch_arg=true
|
||||
|
||||
if defined _batch_arg (
|
||||
set _batch_arg=
|
||||
set sbt_args_batch=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-no-colors" set _no_colors_arg=true
|
||||
if "%~0" == "--no-colors" set _no_colors_arg=true
|
||||
|
||||
if defined _no_colors_arg (
|
||||
set _no_colors_arg=
|
||||
set sbt_args_no_colors=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-no-global" set _no_global_arg=true
|
||||
if "%~0" == "--no-global" set _no_global_arg=true
|
||||
|
||||
if defined _no_global_arg (
|
||||
set _no_global_arg=
|
||||
set sbt_args_no_global=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-traces" set _traces_arg=true
|
||||
if "%~0" == "--traces" set _traces_arg=true
|
||||
|
||||
if defined _traces_arg (
|
||||
set _traces_arg=
|
||||
set sbt_args_traces=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-sbt-create" set _sbt_create_arg=true
|
||||
if "%~0" == "--sbt-create" set _sbt_create_arg=true
|
||||
|
||||
if defined _sbt_create_arg (
|
||||
set _sbt_create_arg=
|
||||
set sbt_args_sbt_create=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-sbt-dir" set _sbt_dir_arg=true
|
||||
if "%~0" == "--sbt-dir" set _sbt_dir_arg=true
|
||||
|
||||
if defined _sbt_dir_arg (
|
||||
set _sbt_dir_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_sbt_dir=%1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "-sbt-boot" set _sbt_boot_arg=true
|
||||
if "%~0" == "--sbt-boot" set _sbt_boot_arg=true
|
||||
|
||||
if defined _sbt_boot_arg (
|
||||
set _sbt_boot_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_sbt_boot=%1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "-sbt-jar" set _sbt_jar=true
|
||||
if "%~0" == "--sbt-jar" set _sbt_jar=true
|
||||
|
||||
if defined _sbt_jar (
|
||||
set _sbt_jar=
|
||||
if not "%~1" == "" (
|
||||
if exist "%~1" (
|
||||
set sbt_args_sbt_jar=%1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo %~1 does not exist
|
||||
goto error
|
||||
)
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "-ivy" set _sbt_ivy_arg=true
|
||||
if "%~0" == "--ivy" set _sbt_ivy_arg=true
|
||||
|
||||
if defined _sbt_ivy_arg (
|
||||
set _sbt_ivy_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_ivy=%1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "-debug-inc" set _debug_inc_arg=true
|
||||
if "%~0" == "--debug-inc" set _debug_inc_arg=true
|
||||
|
||||
if defined _debug_inc_arg (
|
||||
set _debug_inc_arg=
|
||||
set sbt_args_debug_inc=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "--sbt-version" set _sbt_version_arg=true
|
||||
if "%~0" == "-sbt-version" set _sbt_version_arg=true
|
||||
|
||||
if defined _sbt_version_arg (
|
||||
set _sbt_version_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_sbt_version=%~1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "--mem" set _sbt_mem_arg=true
|
||||
if "%~0" == "-mem" set _sbt_mem_arg=true
|
||||
|
||||
if defined _sbt_mem_arg (
|
||||
set _sbt_mem_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_mem=%~1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "--supershell" set _supershell_arg=true
|
||||
if "%~0" == "-supershell" set _supershell_arg=true
|
||||
|
||||
if defined _supershell_arg (
|
||||
set _supershell_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_supershell=%~1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "--color" set _color_arg=true
|
||||
if "%~0" == "-color" set _color_arg=true
|
||||
|
||||
if defined _color_arg (
|
||||
set _color_arg=
|
||||
if not "%~1" == "" (
|
||||
set sbt_args_color=%~1
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo "%~0" is missing a value
|
||||
goto error
|
||||
)
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "--no-share" set _no_share_arg=true
|
||||
if "%~0" == "-no-share" set _no_share_arg=true
|
||||
|
||||
if defined _no_share_arg (
|
||||
set _no_share_arg=
|
||||
set sbt_args_no_share=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "--timings" set _timings_arg=true
|
||||
if "%~0" == "-timings" set _timings_arg=true
|
||||
|
||||
if defined _timings_arg (
|
||||
set _timings_arg=
|
||||
set sbt_args_timings=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "--script-version" (
|
||||
set sbt_args_print_sbt_script_version=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "--numeric-version" (
|
||||
set sbt_args_print_sbt_version=1
|
||||
goto args_loop
|
||||
)
|
||||
|
||||
if "%~0" == "-jvm-debug" set _jvm_debug_arg=true
|
||||
if "%~0" == "--jvm-debug" set _jvm_debug_arg=true
|
||||
|
||||
if defined _jvm_debug_arg (
|
||||
set _jvm_debug_arg=
|
||||
if not "%~1" == "" (
|
||||
set /a JVM_DEBUG_PORT=%~1 2>nul >nul
|
||||
if !JVM_DEBUG_PORT! EQU 0 (
|
||||
rem next argument wasn't a port, set a default and process next arg
|
||||
set /A JVM_DEBUG_PORT=5005
|
||||
goto args_loop
|
||||
) else (
|
||||
shift
|
||||
goto args_loop
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "-java-home" set _java_home_arg=true
|
||||
if "%~0" == "--java-home" set _java_home_arg=true
|
||||
|
||||
if defined _java_home_arg (
|
||||
set _java_home_arg=
|
||||
if not "%~1" == "" (
|
||||
if exist "%~1\bin\java.exe" (
|
||||
set "_JAVACMD=%~1\bin\java.exe"
|
||||
set "JAVA_HOME=%~1"
|
||||
set "JDK_HOME=%~1"
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo Directory "%~1" for JAVA_HOME is not valid
|
||||
goto error
|
||||
)
|
||||
) else (
|
||||
echo Second argument for --java-home missing
|
||||
goto error
|
||||
)
|
||||
)
|
||||
|
||||
if "%~0" == "new" (
|
||||
if not defined SBT_ARGS (
|
||||
set sbt_new=true
|
||||
)
|
||||
)
|
||||
|
||||
if "%g:~0,2%" == "-D" (
|
||||
rem special handling for -D since '=' gets parsed away
|
||||
for /F "tokens=1 delims==" %%a in ("%g%") do (
|
||||
rem make sure it doesn't have the '=' already
|
||||
if "%g%" == "%%a" (
|
||||
if not "%~1" == "" (
|
||||
call :dlog [args_loop] -D argument %~0=%~1
|
||||
set "SBT_ARGS=!SBT_ARGS! %~0=%~1"
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo %g% is missing a value
|
||||
goto error
|
||||
)
|
||||
) else (
|
||||
call :dlog [args_loop] -D argument %~0
|
||||
set "SBT_ARGS=!SBT_ARGS! %~0"
|
||||
goto args_loop
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if not "%g:~0,5%" == "-XX:+" if not "%g:~0,5%" == "-XX:-" if "%g:~0,3%" == "-XX" (
|
||||
rem special handling for -XX since '=' gets parsed away
|
||||
for /F "tokens=1 delims==" %%a in ("%g%") do (
|
||||
rem make sure it doesn't have the '=' already
|
||||
if "%g%" == "%%a" (
|
||||
if not "%~1" == "" (
|
||||
call :dlog [args_loop] -XX argument %~0=%~1
|
||||
set "SBT_ARGS=!SBT_ARGS! %~0=%~1"
|
||||
shift
|
||||
goto args_loop
|
||||
) else (
|
||||
echo %g% is missing a value
|
||||
goto error
|
||||
)
|
||||
) else (
|
||||
call :dlog [args_loop] -XX argument %~0
|
||||
set "SBT_ARGS=!SBT_ARGS! %~0"
|
||||
goto args_loop
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
rem the %0 (instead of %~0) preserves original argument quoting
|
||||
set SBT_ARGS=!SBT_ARGS! %0
|
||||
|
||||
goto args_loop
|
||||
:args_end
|
||||
|
||||
rem Confirm a user's intent if the current directory does not look like an sbt
|
||||
rem top-level directory and the "new" command was not given.
|
||||
|
||||
if not defined sbt_args_sbt_create if not defined sbt_args_print_version if not defined sbt_args_print_sbt_version if not defined sbt_args_print_sbt_script_version if not exist build.sbt (
|
||||
if not exist project\ (
|
||||
if not defined sbt_new (
|
||||
echo [warn] Neither build.sbt nor a 'project' directory in the current directory: "%CD%"
|
||||
setlocal
|
||||
:confirm
|
||||
echo c^) continue
|
||||
echo q^) quit
|
||||
|
||||
set /P reply=^?
|
||||
if /I "!reply!" == "c" (
|
||||
goto confirm_end
|
||||
) else if /I "!reply!" == "q" (
|
||||
exit /B 1
|
||||
)
|
||||
|
||||
goto confirm
|
||||
:confirm_end
|
||||
endlocal
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
call :process
|
||||
|
||||
rem avoid bootstrapping/java version check for script version
|
||||
|
||||
if !sbt_args_print_sbt_script_version! equ 1 (
|
||||
echo !init_sbt_version!
|
||||
goto :eof
|
||||
)
|
||||
|
||||
call :checkjava
|
||||
|
||||
call :copyrt
|
||||
|
||||
if defined JVM_DEBUG_PORT (
|
||||
set _JAVA_OPTS=!_JAVA_OPTS! -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=!JVM_DEBUG_PORT!
|
||||
)
|
||||
|
||||
call :sync_preloaded
|
||||
|
||||
call :run !SBT_ARGS!
|
||||
|
||||
if ERRORLEVEL 1 goto error
|
||||
goto end
|
||||
|
||||
:run
|
||||
|
||||
rem set arguments
|
||||
|
||||
if defined sbt_args_debug_inc (
|
||||
set _SBT_OPTS=-Dxsbt.inc.debug=true !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_no_colors (
|
||||
set _SBT_OPTS=-Dsbt.log.noformat=true !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_no_global (
|
||||
set _SBT_OPTS=-Dsbt.global.base=project/.sbtboot !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_no_share (
|
||||
set _SBT_OPTS=-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_supershell (
|
||||
set _SBT_OPTS=-Dsbt.supershell=!sbt_args_supershell! !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_sbt_version (
|
||||
set _SBT_OPTS=-Dsbt.version=!sbt_args_sbt_version! !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_sbt_dir (
|
||||
set _SBT_OPTS=-Dsbt.global.base=!sbt_args_sbt_dir! !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_sbt_boot (
|
||||
set _SBT_OPTS=-Dsbt.boot.directory=!sbt_args_sbt_boot! !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_ivy (
|
||||
set _SBT_OPTS=-Dsbt.ivy.home=!sbt_args_ivy! !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_color (
|
||||
set _SBT_OPTS=-Dsbt.color=!sbt_args_color! !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_mem (
|
||||
call :addMemory !sbt_args_mem!
|
||||
) else (
|
||||
call :addDefaultMemory
|
||||
)
|
||||
|
||||
if defined sbt_args_timings (
|
||||
set _SBT_OPTS=-Dsbt.task.timings=true -Dsbt.task.timings.on.shutdown=true !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_traces (
|
||||
set _SBT_OPTS=-Dsbt.traces=true !_SBT_OPTS!
|
||||
)
|
||||
|
||||
if defined sbt_args_sbt_jar (
|
||||
set "sbt_jar=!sbt_args_sbt_jar!"
|
||||
) else (
|
||||
set "sbt_jar=!SBT_HOME!\bin\sbt-launch.jar"
|
||||
)
|
||||
|
||||
set sbt_jar=!sbt_jar:"=!
|
||||
|
||||
rem TODO: _SBT_OPTS needs to be processed as args and diffed against SBT_ARGS
|
||||
|
||||
if !sbt_args_print_sbt_version! equ 1 (
|
||||
call :set_sbt_version
|
||||
echo !sbt_version!
|
||||
goto :eof
|
||||
)
|
||||
|
||||
if !sbt_args_print_version! equ 1 (
|
||||
call :set_sbt_version
|
||||
echo sbt version in this project: !sbt_version!
|
||||
echo sbt script version: !init_sbt_version!
|
||||
goto :eof
|
||||
)
|
||||
|
||||
if defined sbt_args_verbose (
|
||||
echo # Executing command line:
|
||||
echo "!_JAVACMD!"
|
||||
if defined _JAVA_OPTS ( call :echolist !_JAVA_OPTS! )
|
||||
if defined _SBT_OPTS ( call :echolist !_SBT_OPTS! )
|
||||
echo -cp
|
||||
echo "!sbt_jar!"
|
||||
echo xsbt.boot.Boot
|
||||
if not "%~1" == "" ( call :echolist %* )
|
||||
echo.
|
||||
)
|
||||
|
||||
"!_JAVACMD!" !_JAVA_OPTS! !_SBT_OPTS! -cp "!sbt_jar!" xsbt.boot.Boot %*
|
||||
|
||||
goto :eof
|
||||
|
||||
rem for expression tries to interpret files, so simply loop over %* instead
|
||||
rem fixes dealing with quotes after = args: -Dscala.ext.dirs="C:\Users\First Last\.sbt\0.13\java9-rt-ext-adoptopenjdk_11_0_3"
|
||||
:echolist
|
||||
rem call method is in first call of %0
|
||||
shift
|
||||
|
||||
if "%~0" == "" goto echolist_end
|
||||
set "p=%~0"
|
||||
|
||||
if "%p:~0,2%" == "-D" (
|
||||
rem special handling for -D since '=' gets parsed away
|
||||
for /F "tokens=1 delims==" %%a in ("%p%") do (
|
||||
rem make sure it doesn't have the '=' already
|
||||
if "%p%" == "%%a" if not "%~1" == "" (
|
||||
echo %0=%1
|
||||
shift
|
||||
goto echolist
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if not "%p:~0,5%" == "-XX:+" if not "%p:~0,5%" == "-XX:-" if "%p:~0,3%" == "-XX" (
|
||||
rem special handling for -XX since '=' gets parsed away
|
||||
for /F "tokens=1 delims==" %%a in ("%p%") do (
|
||||
rem make sure it doesn't have the '=' already
|
||||
if "%p%" == "%%a" if not "%~1" == "" (
|
||||
echo %0=%1
|
||||
shift
|
||||
goto echolist
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if "%p:~0,14%" == "-agentlib:jdwp" (
|
||||
rem special handling for --jvm-debug since '=' and ',' gets parsed away
|
||||
for /F "tokens=1 delims==" %%a in ("%p%") do (
|
||||
rem make sure it doesn't have the '=' already
|
||||
if "%p%" == "%%a" if not "%~1" == "" if not "%~2" == "" if not "%~3" == "" if not "%~4" == "" if not "%~5" == "" if not "%~6" == "" if not "%~7" == "" if not "%~8" == "" (
|
||||
echo %0=%1=%2,%3=%4,%5=%6,%7=%8
|
||||
shift & shift & shift & shift & shift & shift & shift & shift
|
||||
goto echolist
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
echo %0
|
||||
goto echolist
|
||||
|
||||
:echolist_end
|
||||
|
||||
exit /B 0
|
||||
|
||||
:addJava
|
||||
call :dlog [addJava] arg = '%*'
|
||||
set "_JAVA_OPTS=!_JAVA_OPTS! %*"
|
||||
exit /B 0
|
||||
|
||||
:addMemory
|
||||
call :dlog [addMemory] arg = '%*'
|
||||
|
||||
rem evict memory related options
|
||||
set _new_java_opts=
|
||||
set _old_java_opts=!_JAVA_OPTS!
|
||||
:next_java_opt
|
||||
if "!_old_java_opts!" == "" goto :done_java_opt
|
||||
for /F "tokens=1,*" %%g in ("!_old_java_opts!") do (
|
||||
set "p=%%g"
|
||||
if not "!p:~0,4!" == "-Xmx" if not "!p:~0,4!" == "-Xms" if not "!p:~0,15!" == "-XX:MaxPermSize" if not "!p:~0,20!" == "-XX:MaxMetaspaceSize" if not "!p:~0,25!" == "-XX:ReservedCodeCacheSize" (
|
||||
set _new_java_opts=!_new_java_opts! %%g
|
||||
)
|
||||
set "_old_java_opts=%%h"
|
||||
)
|
||||
goto :next_java_opt
|
||||
:done_java_opt
|
||||
set _JAVA_OPTS=!_new_java_opts!
|
||||
|
||||
set _new_sbt_opts=
|
||||
set _old_sbt_opts=!_SBT_OPTS!
|
||||
:next_sbt_opt
|
||||
if "!_old_sbt_opts!" == "" goto :done_sbt_opt
|
||||
for /F "tokens=1,*" %%g in ("!_old_sbt_opts!") do (
|
||||
set "p=%%g"
|
||||
if not "!p:~0,4!" == "-Xmx" if not "!p:~0,4!" == "-Xms" if not "!p:~0,15!" == "-XX:MaxPermSize" if not "!p:~0,20!" == "-XX:MaxMetaspaceSize" if not "!p:~0,25!" == "-XX:ReservedCodeCacheSize" (
|
||||
set _new_sbt_opts=!_new_sbt_opts! %%g
|
||||
)
|
||||
set "_old_sbt_opts=%%h"
|
||||
)
|
||||
goto :next_sbt_opt
|
||||
:done_sbt_opt
|
||||
set _SBT_OPTS=!_new_sbt_opts!
|
||||
|
||||
rem a ham-fisted attempt to move some memory settings in concert
|
||||
set mem=%1
|
||||
set /a codecache=!mem! / 8
|
||||
if !codecache! GEQ 512 set /a codecache=512
|
||||
if !codecache! LEQ 128 set /a codecache=128
|
||||
|
||||
set /a class_metadata_size=!codecache! * 2
|
||||
|
||||
call :addJava -Xms!mem!m
|
||||
call :addJava -Xmx!mem!m
|
||||
call :addJava -Xss4M
|
||||
call :addJava -XX:ReservedCodeCacheSize=!codecache!m
|
||||
|
||||
if /I !JAVA_VERSION! LSS 8 (
|
||||
call :addJava -XX:MaxPermSize=!class_metadata_size!m
|
||||
)
|
||||
|
||||
exit /B 0
|
||||
|
||||
:addDefaultMemory
|
||||
rem if we detect any of these settings in ${JAVA_OPTS} or ${JAVA_TOOL_OPTIONS} we need to NOT output our settings.
|
||||
rem The reason is the Xms/Xmx, if they don't line up, cause errors.
|
||||
|
||||
set _has_memory_args=
|
||||
|
||||
if defined _JAVA_OPTS for /F %%g in ("!_JAVA_OPTS!") do (
|
||||
set "p=%%g"
|
||||
if "!p:~0,4!" == "-Xmx" set _has_memory_args=1
|
||||
if "!p:~0,4!" == "-Xms" set _has_memory_args=1
|
||||
)
|
||||
|
||||
if defined JAVA_TOOL_OPTIONS for /F %%g in ("%JAVA_TOOL_OPTIONS%") do (
|
||||
set "p=%%g"
|
||||
if "!p:~0,4!" == "-Xmx" set _has_memory_args=1
|
||||
if "!p:~0,4!" == "-Xms" set _has_memory_args=1
|
||||
)
|
||||
|
||||
if defined _SBT_OPTS for /F %%g in ("!_SBT_OPTS!") do (
|
||||
set "p=%%g"
|
||||
if "!p:~0,4!" == "-Xmx" set _has_memory_args=1
|
||||
if "!p:~0,4!" == "-Xms" set _has_memory_args=1
|
||||
)
|
||||
|
||||
if not defined _has_memory_args (
|
||||
call :addMemory !sbt_default_mem!
|
||||
)
|
||||
exit /B 0
|
||||
|
||||
:dlog
|
||||
if defined sbt_args_debug (
|
||||
echo %* 1>&2
|
||||
)
|
||||
exit /B 0
|
||||
|
||||
:process
|
||||
rem Parses x out of 1.x; for example 8 out of java version 1.8.0_xx
|
||||
rem Otherwise, parses the major version; 9 out of java version 9-ea
|
||||
set JAVA_VERSION=0
|
||||
|
||||
for /f "tokens=3 usebackq" %%g in (`CALL "!_JAVACMD!" -Xms32M -Xmx32M -version 2^>^&1 ^| findstr /i version`) do (
|
||||
set JAVA_VERSION=%%g
|
||||
)
|
||||
|
||||
rem removes all quotes from JAVA_VERSION
|
||||
set JAVA_VERSION=!JAVA_VERSION:"=!
|
||||
|
||||
for /f "delims=.-_ tokens=1-2" %%v in ("!JAVA_VERSION!") do (
|
||||
if /I "%%v" EQU "1" (
|
||||
set JAVA_VERSION=%%w
|
||||
) else (
|
||||
set JAVA_VERSION=%%v
|
||||
)
|
||||
)
|
||||
|
||||
exit /B 0
|
||||
|
||||
:checkjava
|
||||
set /a required_version=6
|
||||
if /I !JAVA_VERSION! GEQ !required_version! (
|
||||
exit /B 0
|
||||
)
|
||||
echo.
|
||||
echo The Java Development Kit ^(JDK^) installation you have is not up to date.
|
||||
echo sbt requires at least version !required_version!+, you have
|
||||
echo version "!JAVA_VERSION!"
|
||||
echo.
|
||||
echo Please go to http://www.oracle.com/technetwork/java/javase/downloads/ and download
|
||||
echo a valid JDK and install before running sbt.
|
||||
echo.
|
||||
exit /B 1
|
||||
|
||||
:copyrt
|
||||
if /I !JAVA_VERSION! GEQ 9 (
|
||||
set "rtexport=!SBT_BIN_DIR!java9-rt-export.jar"
|
||||
|
||||
"!_JAVACMD!" !_JAVA_OPTS! !_SBT_OPTS! -jar "!rtexport!" --rt-ext-dir > "%TEMP%.\rtext.txt"
|
||||
set /p java9_ext= < "%TEMP%.\rtext.txt"
|
||||
set "java9_rt=!java9_ext!\rt.jar"
|
||||
|
||||
if not exist "!java9_rt!" (
|
||||
mkdir "!java9_ext!"
|
||||
"!_JAVACMD!" !_JAVA_OPTS! !_SBT_OPTS! -jar "!rtexport!" "!java9_rt!"
|
||||
)
|
||||
set _JAVA_OPTS=!_JAVA_OPTS! -Dscala.ext.dirs="!java9_ext!"
|
||||
)
|
||||
exit /B 0
|
||||
|
||||
:sync_preloaded
|
||||
if not defined init_sbt_version (
|
||||
rem FIXME: better !init_sbt_version! detection
|
||||
FOR /F "tokens=* usebackq" %%F IN (`dir /b "!SBT_HOME!\lib\local-preloaded\org\scala-sbt\sbt" /B`) DO (
|
||||
SET init_sbt_version=%%F
|
||||
)
|
||||
)
|
||||
|
||||
set PRELOAD_SBT_JAR="%UserProfile%\.sbt\preloaded\org\scala-sbt\sbt\!init_sbt_version!\"
|
||||
if /I !JAVA_VERSION! GEQ 8 (
|
||||
where robocopy >nul 2>nul
|
||||
if %ERRORLEVEL% EQU 0 (
|
||||
if not exist !PRELOAD_SBT_JAR! (
|
||||
if exist "!SBT_HOME!\lib\local-preloaded\" (
|
||||
robocopy "!SBT_HOME!\lib\local-preloaded" "%UserProfile%\.sbt\preloaded" /E >nul 2>nul
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
exit /B 0
|
||||
|
||||
:usage
|
||||
|
||||
for /f "tokens=3 usebackq" %%g in (`CALL "!_JAVACMD!" -Xms32M -Xmx32M -version 2^>^&1 ^| findstr /i version`) do (
|
||||
set FULL_JAVA_VERSION=%%g
|
||||
)
|
||||
|
||||
echo.
|
||||
echo Usage: %~n0 [options]
|
||||
echo.
|
||||
echo -h ^| --help print this message
|
||||
echo -v ^| --verbose this runner is chattier
|
||||
echo -V ^| --version print sbt version information
|
||||
echo --numeric-version print the numeric sbt version (sbt sbtVersion)
|
||||
echo --script-version print the version of sbt script
|
||||
echo -d ^| --debug set sbt log level to debug
|
||||
echo -debug-inc ^| --debug-inc
|
||||
echo enable extra debugging for the incremental debugger
|
||||
echo --no-colors disable ANSI color codes
|
||||
echo --color=auto^|always^|true^|false^|never
|
||||
echo enable or disable ANSI color codes ^(sbt 1.3 and above^)
|
||||
echo --supershell=auto^|always^|true^|false^|never
|
||||
echo enable or disable supershell ^(sbt 1.3 and above^)
|
||||
echo --traces generate Trace Event report on shutdown ^(sbt 1.3 and above^)
|
||||
echo --timings display task timings report on shutdown
|
||||
echo --sbt-create start sbt even if current directory contains no sbt project
|
||||
echo --sbt-dir ^<path^> path to global settings/plugins directory ^(default: ~/.sbt^)
|
||||
echo --sbt-boot ^<path^> path to shared boot directory ^(default: ~/.sbt/boot in 0.11 series^)
|
||||
echo --ivy ^<path^> path to local Ivy repository ^(default: ~/.ivy2^)
|
||||
echo --mem ^<integer^> set memory options ^(default: %sbt_default_mem%^)
|
||||
echo --no-share use all local caches; no sharing
|
||||
echo --no-global uses global caches, but does not use global ~/.sbt directory.
|
||||
echo --jvm-debug ^<port^> enable on JVM debugging, open at the given port.
|
||||
rem echo --batch disable interactive mode
|
||||
echo.
|
||||
echo # sbt version ^(default: from project/build.properties if present, else latest release^)
|
||||
echo --sbt-version ^<version^> use the specified version of sbt
|
||||
echo --sbt-jar ^<path^> use the specified jar as the sbt launcher
|
||||
echo.
|
||||
echo # java version ^(default: java from PATH, currently !FULL_JAVA_VERSION!^)
|
||||
echo --java-home ^<path^> alternate JAVA_HOME
|
||||
echo.
|
||||
echo # jvm options and output control
|
||||
echo JAVA_OPTS environment variable, if unset uses "!default_java_opts!"
|
||||
echo .jvmopts if this file exists in the current directory, its contents
|
||||
echo are appended to JAVA_OPTS
|
||||
echo SBT_OPTS environment variable, if unset uses "!default_sbt_opts!"
|
||||
echo .sbtopts if this file exists in the current directory, its contents
|
||||
echo are prepended to the runner args
|
||||
echo !SBT_CONFIG!
|
||||
echo if this file exists, it is prepended to the runner args
|
||||
echo -Dkey=val pass -Dkey=val directly to the java runtime
|
||||
rem echo -J-X pass option -X directly to the java runtime
|
||||
rem echo ^(-J is stripped^)
|
||||
rem echo -S-X add -X to sbt's scalacOptions ^(-S is stripped^)
|
||||
echo.
|
||||
echo In the case of duplicated or conflicting options, the order above
|
||||
echo shows precedence: JAVA_OPTS lowest, command line options highest.
|
||||
echo.
|
||||
|
||||
@endlocal
|
||||
exit /B 1
|
||||
|
||||
:set_sbt_version
|
||||
rem set project sbtVersion
|
||||
for /F "usebackq tokens=2" %%G in (`CALL "!_JAVACMD!" -jar "!sbt_jar!" "sbtVersion" 2^>^&1`) do set "sbt_version=%%G"
|
||||
exit /B 0
|
||||
|
||||
:error
|
||||
@endlocal
|
||||
exit /B 1
|
||||
|
||||
:end
|
||||
@endlocal
|
||||
exit /B 0
|
14
sbt-dist/conf/sbtconfig.txt
Normal file
14
sbt-dist/conf/sbtconfig.txt
Normal file
@ -0,0 +1,14 @@
|
||||
# Set the java args to high
|
||||
|
||||
-Xmx512M
|
||||
|
||||
-XX:MaxPermSize=256m
|
||||
|
||||
-XX:ReservedCodeCacheSize=128m
|
||||
|
||||
|
||||
|
||||
# Set the extra SBT options
|
||||
|
||||
-Dsbt.log.format=true
|
||||
|
49
sbt-dist/conf/sbtopts
Normal file
49
sbt-dist/conf/sbtopts
Normal file
@ -0,0 +1,49 @@
|
||||
# ------------------------------------------------ #
|
||||
# The SBT Configuration file. #
|
||||
# ------------------------------------------------ #
|
||||
|
||||
|
||||
# Disable ANSI color codes
|
||||
#
|
||||
#-no-colors
|
||||
|
||||
# Starts sbt even if the current directory contains no sbt project.
|
||||
#
|
||||
-sbt-create
|
||||
|
||||
# Path to global settings/plugins directory (default: ~/.sbt)
|
||||
#
|
||||
#-sbt-dir /etc/sbt
|
||||
|
||||
# Path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
|
||||
#
|
||||
#-sbt-boot ~/.sbt/boot
|
||||
|
||||
# Path to local Ivy repository (default: ~/.ivy2)
|
||||
#
|
||||
#-ivy ~/.ivy2
|
||||
|
||||
# set memory options
|
||||
#
|
||||
#-mem <integer>
|
||||
|
||||
# Use local caches for projects, no sharing.
|
||||
#
|
||||
#-no-share
|
||||
|
||||
# Put SBT in offline mode.
|
||||
#
|
||||
#-offline
|
||||
|
||||
# Sets the SBT version to use.
|
||||
#-sbt-version 0.11.3
|
||||
|
||||
# Scala version (default: latest release)
|
||||
#
|
||||
#-scala-home <path>
|
||||
#-scala-version <version>
|
||||
|
||||
# java version (default: java from PATH, currently $(java -version |& grep version))
|
||||
#
|
||||
#-java-home <path>
|
||||
|
3
sbt.bat
Executable file
3
sbt.bat
Executable file
@ -0,0 +1,3 @@
|
||||
@REM SBT launcher script
|
||||
|
||||
.\sbt-dist\bin\sbt.bat %*
|
@ -0,0 +1,31 @@
|
||||
package dev.freireservices.social_altruism;
|
||||
|
||||
import akka.actor.typed.ActorRef;
|
||||
import akka.actor.typed.ActorSystem;
|
||||
import akka.actor.typed.Behavior;
|
||||
import akka.actor.typed.Terminated;
|
||||
import akka.actor.typed.javadsl.Behaviors;
|
||||
|
||||
public class ChatQuickStart {
|
||||
public static void main(String[] args) {
|
||||
// #actor-system
|
||||
ActorSystem.create(Main.create(), "ChatRoomDemo");
|
||||
}
|
||||
|
||||
public static class Main {
|
||||
public static Behavior<Void> create() {
|
||||
return Behaviors.setup(
|
||||
context -> {
|
||||
ActorRef<ChatRoom.RoomCommand> chatRoom = context.spawn(ChatRoom.create(), "chatRoom");
|
||||
ActorRef<ChatRoom.SessionEvent> gabbler = context.spawn(Gabbler.create(), "gabbler");
|
||||
context.watch(gabbler);
|
||||
chatRoom.tell(new ChatRoom.GetSession("ol’ Gabbler", gabbler));
|
||||
|
||||
return Behaviors.receive(Void.class)
|
||||
.onSignal(Terminated.class, sig -> Behaviors.stopped())
|
||||
.build();
|
||||
});
|
||||
}
|
||||
}
|
||||
// #actor-system
|
||||
}
|
212
src/main/java/dev/freireservices/social_altruism/ChatRoom.java
Normal file
212
src/main/java/dev/freireservices/social_altruism/ChatRoom.java
Normal file
@ -0,0 +1,212 @@
|
||||
package dev.freireservices.social_altruism;
|
||||
|
||||
import akka.actor.typed.ActorRef;
|
||||
import akka.actor.typed.Behavior;
|
||||
import akka.actor.typed.javadsl.ActorContext;
|
||||
import akka.actor.typed.javadsl.Behaviors;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class ChatRoom {
|
||||
|
||||
private final ActorContext<RoomCommand> context;
|
||||
|
||||
private ChatRoom(ActorContext<RoomCommand> context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
interface RoomCommand {}
|
||||
|
||||
public static final class GetSession implements RoomCommand {
|
||||
public final String screenName;
|
||||
public final ActorRef<SessionEvent> replyTo;
|
||||
|
||||
|
||||
public GetSession(String screenName, ActorRef<SessionEvent> replyTo) {
|
||||
this.screenName = screenName;
|
||||
this.replyTo = replyTo;
|
||||
}
|
||||
}
|
||||
// #chatroom-protocol
|
||||
// #chatroom-behavior
|
||||
private static final class PublishSessionMessage implements RoomCommand {
|
||||
public final String screenName;
|
||||
public final String message;
|
||||
|
||||
|
||||
public PublishSessionMessage(String screenName, String message) {
|
||||
this.screenName = screenName;
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
// #chatroom-behavior
|
||||
// #chatroom-protocol
|
||||
|
||||
private Behavior<RoomCommand> onGetSession(
|
||||
List<ActorRef<SessionCommand>> sessions, GetSession getSession) {
|
||||
|
||||
if (sessions.stream().anyMatch(s -> s.path().name().equals(URLEncoder.encode(getSession.screenName, StandardCharsets.UTF_8)))) {
|
||||
getSession.replyTo.tell(new SessionDenied("duplicate session name"));
|
||||
return Behaviors.same();
|
||||
}
|
||||
|
||||
ActorRef<SessionEvent> client = getSession.replyTo;
|
||||
ActorRef<SessionCommand> ses =
|
||||
context.spawn(
|
||||
Session.create(context.getSelf(), getSession.screenName, client),
|
||||
URLEncoder.encode(getSession.screenName, StandardCharsets.UTF_8));
|
||||
// narrow to only expose PostMessage
|
||||
|
||||
client.tell(new SessionGranted(ses.narrow()));
|
||||
|
||||
List<ActorRef<SessionCommand>> newSessions = new ArrayList<>(sessions);
|
||||
newSessions.add(ses);
|
||||
return chatRoom(newSessions);
|
||||
}
|
||||
|
||||
private Behavior<RoomCommand> onPublishSessionMessage(
|
||||
List<ActorRef<SessionCommand>> sessions, PublishSessionMessage pub) {
|
||||
NotifyClient notification =
|
||||
new NotifyClient((new MessagePosted(pub.screenName, pub.message)));
|
||||
sessions.forEach(s -> s.tell(notification));
|
||||
return Behaviors.same();
|
||||
}
|
||||
|
||||
private Behavior<RoomCommand> chatRoom(List<ActorRef<SessionCommand>> sessions) {
|
||||
return Behaviors.receive(RoomCommand.class)
|
||||
.onMessage(GetSession.class, getSession -> onGetSession(sessions, getSession))
|
||||
.onMessage(PublishSessionMessage.class, pub -> onPublishSessionMessage(sessions, pub))
|
||||
.build();
|
||||
}
|
||||
|
||||
|
||||
public static Behavior<RoomCommand> create() {
|
||||
return Behaviors.setup(
|
||||
ctx -> new ChatRoom(ctx).chatRoom(new ArrayList<ActorRef<SessionCommand>>()));
|
||||
}
|
||||
|
||||
public interface SessionEvent {}
|
||||
|
||||
|
||||
public static final class SessionGranted implements SessionEvent {
|
||||
public final ActorRef<PostMessage> handle;
|
||||
|
||||
|
||||
public SessionGranted(ActorRef<PostMessage> handle) {
|
||||
this.handle = handle;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
SessionGranted that = (SessionGranted) o;
|
||||
return Objects.equals(handle, that.handle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(handle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SessionGranted{" +
|
||||
"handle=" + handle +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static final class SessionDenied implements SessionEvent {
|
||||
public final String reason;
|
||||
|
||||
|
||||
public SessionDenied(String reason) {
|
||||
this.reason = reason;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
SessionDenied that = (SessionDenied) o;
|
||||
return Objects.equals(reason, that.reason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(reason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SessionDenied{" +
|
||||
"reason='" + reason + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static final class MessagePosted implements SessionEvent {
|
||||
public final String screenName;
|
||||
public final String message;
|
||||
|
||||
|
||||
public MessagePosted(String screenName, String message) {
|
||||
this.screenName = screenName;
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
interface SessionCommand {}
|
||||
|
||||
|
||||
public static final class PostMessage implements SessionCommand {
|
||||
public final String message;
|
||||
|
||||
|
||||
public PostMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static final class NotifyClient implements SessionCommand {
|
||||
final MessagePosted message;
|
||||
|
||||
|
||||
NotifyClient(MessagePosted message) {
|
||||
this.message = message;
|
||||
}
|
||||
}
|
||||
|
||||
static class Session {
|
||||
static Behavior<ChatRoom.SessionCommand> create(
|
||||
ActorRef<RoomCommand> room, String screenName, ActorRef<SessionEvent> client) {
|
||||
return Behaviors.receive(ChatRoom.SessionCommand.class)
|
||||
.onMessage(PostMessage.class, post -> onPostMessage(room, screenName, post))
|
||||
.onMessage(NotifyClient.class, notification -> onNotifyClient(client, notification))
|
||||
.build();
|
||||
}
|
||||
|
||||
private static Behavior<SessionCommand> onPostMessage(
|
||||
ActorRef<RoomCommand> room, String screenName, PostMessage post) {
|
||||
// from client, publish to others via the room
|
||||
room.tell(new PublishSessionMessage(screenName, post.message));
|
||||
return Behaviors.same();
|
||||
}
|
||||
|
||||
private static Behavior<SessionCommand> onNotifyClient(
|
||||
ActorRef<SessionEvent> client, NotifyClient notification) {
|
||||
// published from the room
|
||||
client.tell(notification.message);
|
||||
return Behaviors.same();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package dev.freireservices.social_altruism;
|
||||
|
||||
import akka.actor.typed.Behavior;
|
||||
import akka.actor.typed.javadsl.ActorContext;
|
||||
import akka.actor.typed.javadsl.Behaviors;
|
||||
import dev.freireservices.social_altruism.ChatRoom;
|
||||
|
||||
public class Gabbler {
|
||||
|
||||
public static Behavior<ChatRoom.SessionEvent> create() {
|
||||
return Behaviors.setup(ctx -> new Gabbler(ctx).behavior());
|
||||
}
|
||||
|
||||
private final ActorContext<ChatRoom.SessionEvent> context;
|
||||
|
||||
private Gabbler(ActorContext<ChatRoom.SessionEvent> context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
private Behavior<ChatRoom.SessionEvent> behavior() {
|
||||
return Behaviors.receive(ChatRoom.SessionEvent.class)
|
||||
.onMessage(ChatRoom.SessionDenied.class, this::onSessionDenied)
|
||||
.onMessage(ChatRoom.SessionGranted.class, this::onSessionGranted)
|
||||
.onMessage(ChatRoom.MessagePosted.class, this::onMessagePosted)
|
||||
.build();
|
||||
}
|
||||
|
||||
private Behavior<ChatRoom.SessionEvent> onSessionDenied(ChatRoom.SessionDenied message) {
|
||||
context.getLog().info("cannot start chat room session: {}", message.reason);
|
||||
return Behaviors.stopped();
|
||||
}
|
||||
|
||||
private Behavior<ChatRoom.SessionEvent> onSessionGranted(ChatRoom.SessionGranted message) {
|
||||
message.handle.tell(new ChatRoom.PostMessage("Hello World!"));
|
||||
return Behaviors.same();
|
||||
}
|
||||
|
||||
private Behavior<ChatRoom.SessionEvent> onMessagePosted(ChatRoom.MessagePosted message) {
|
||||
context
|
||||
.getLog()
|
||||
.info("message has been posted by '{}': {}", message.screenName, message.message);
|
||||
return Behaviors.stopped();
|
||||
}
|
||||
}
|
21
src/main/resources/logback.xml
Normal file
21
src/main/resources/logback.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<!-- This is a development logging configuration that logs to standard out, for an example of a production
|
||||
logging config, see the Akka docs: https://doc.akka.io/docs/akka/2.6/typed/logging.html#logback -->
|
||||
<appender name="STDOUT" target="System.out" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
<pattern>[%date{ISO8601}] [%level] [%logger] [%thread] [%X{akkaSource}] - %msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
|
||||
<queueSize>1024</queueSize>
|
||||
<neverBlock>true</neverBlock>
|
||||
<appender-ref ref="STDOUT" />
|
||||
</appender>
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="ASYNC"/>
|
||||
</root>
|
||||
|
||||
</configuration>
|
@ -0,0 +1,68 @@
|
||||
package dev.freireservices.social_altruism;
|
||||
|
||||
import akka.actor.testkit.typed.javadsl.ActorTestKit;
|
||||
import akka.actor.testkit.typed.javadsl.TestProbe;
|
||||
import akka.actor.typed.ActorRef;
|
||||
import java.time.Duration;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Test;
|
||||
|
||||
// #definition
|
||||
public class ChatQuickStartTest {
|
||||
|
||||
static final ActorTestKit testKit = ActorTestKit.create();
|
||||
|
||||
// #definition
|
||||
|
||||
// #test
|
||||
@Test
|
||||
public void testGreeterActorSendingOfGreeting() {
|
||||
|
||||
TestProbe<ChatRoom.PostMessage> testProbe = testKit.createTestProbe();
|
||||
|
||||
ActorRef<ChatRoom.RoomCommand> chatRoomTest = testKit.spawn(ChatRoom.create(), "chatRoom");
|
||||
ActorRef<ChatRoom.SessionEvent> gabblerTest = testKit.spawn(Gabbler.create(), "gabbler");
|
||||
|
||||
chatRoomTest.tell(new ChatRoom.GetSession("ol’ Gabbler", gabblerTest));
|
||||
|
||||
ChatRoom.SessionGranted sessionGranted = new ChatRoom.SessionGranted(testProbe.ref());
|
||||
gabblerTest.tell(sessionGranted);
|
||||
|
||||
ChatRoom.PostMessage postMessage = new ChatRoom.PostMessage("Hello World!");
|
||||
sessionGranted.handle.tell(postMessage);
|
||||
// #test
|
||||
|
||||
// #assert
|
||||
testProbe.expectMessage(postMessage);
|
||||
// #assert
|
||||
|
||||
testKit.stop(chatRoomTest);
|
||||
testKit.stop(gabblerTest);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testActorGetsUserDenied() {
|
||||
|
||||
TestProbe<ChatRoom.SessionEvent> testProbe = testKit.createTestProbe();
|
||||
|
||||
ActorRef<ChatRoom.RoomCommand> chatRoomTest = testKit.spawn(ChatRoom.create(), "chatRoom");
|
||||
|
||||
chatRoomTest.tell(new ChatRoom.GetSession("ol’ Gabbler", testProbe.ref()));
|
||||
|
||||
testProbe.expectMessageClass(ChatRoom.SessionGranted.class, Duration.ofSeconds(10));
|
||||
|
||||
chatRoomTest.tell(new ChatRoom.GetSession("ol’ Gabbler", testProbe.ref()));
|
||||
|
||||
ChatRoom.SessionDenied sessionDenied = new ChatRoom.SessionDenied("duplicate session name");
|
||||
|
||||
testProbe.expectMessage(Duration.ofSeconds(10), sessionDenied);
|
||||
|
||||
// #assert
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void cleanup() {
|
||||
testKit.system().terminate();
|
||||
testKit.shutdownTestKit();
|
||||
}
|
||||
}
|
BIN
target/app-1.0.jar
Normal file
BIN
target/app-1.0.jar
Normal file
Binary file not shown.
BIN
target/classes/com/example/AkkaQuickstart.class
Normal file
BIN
target/classes/com/example/AkkaQuickstart.class
Normal file
Binary file not shown.
BIN
target/classes/com/example/Greeter$Greet.class
Normal file
BIN
target/classes/com/example/Greeter$Greet.class
Normal file
Binary file not shown.
BIN
target/classes/com/example/Greeter$Greeted.class
Normal file
BIN
target/classes/com/example/Greeter$Greeted.class
Normal file
Binary file not shown.
BIN
target/classes/com/example/Greeter.class
Normal file
BIN
target/classes/com/example/Greeter.class
Normal file
Binary file not shown.
BIN
target/classes/com/example/GreeterBot.class
Normal file
BIN
target/classes/com/example/GreeterBot.class
Normal file
Binary file not shown.
BIN
target/classes/com/example/GreeterMain$SayHello.class
Normal file
BIN
target/classes/com/example/GreeterMain$SayHello.class
Normal file
Binary file not shown.
BIN
target/classes/com/example/GreeterMain.class
Normal file
BIN
target/classes/com/example/GreeterMain.class
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user