<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>DukeScript</title>
    <description>Write an awesome description for your new site here. You can edit this line in _config.yml. It will appear in your document head meta (for Google search results) and in your feed.xml site description.
</description>
    <link>http://dukescript.com/</link>
    <atom:link href="http://dukescript.com/feed.xml" rel="self" type="application/rss+xml" />
    <pubDate>Fri, 04 Jul 2025 08:26:45 +0000</pubDate>
    <lastBuildDate>Fri, 04 Jul 2025 08:26:45 +0000</lastBuildDate>
    <generator>Jekyll v3.8.5</generator>
    
      <item>
        <title>Archetypes Release</title>
        <description>&lt;h1 id=&quot;dukescript-maven-archetypes-041-released&quot;&gt;DukeScript Maven Archetypes 0.41 Released!&lt;/h1&gt;

&lt;p&gt;We’re excited to announce the release of DukeScript Maven Archetypes version 0.41! This release brings improvements and updates to help you quickly bootstrap your cross-platform Java applications.&lt;/p&gt;

&lt;h2 id=&quot;what-is-dukescript&quot;&gt;What is DukeScript?&lt;/h2&gt;

&lt;p&gt;DukeScript is a technology that allows you to write applications in Java and HTML5 that run everywhere - on desktop (Windows, Mac, Linux), mobile (iOS, Android), and in the browser. Write once, run anywhere has never been more real!&lt;/p&gt;

&lt;h2 id=&quot;whats-new-in-041&quot;&gt;What’s New in 0.41?&lt;/h2&gt;

&lt;p&gt;This release includes:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Updated dependencies to the latest stable versions&lt;/li&gt;
  &lt;li&gt;Improved project templates for faster development starts&lt;/li&gt;
  &lt;li&gt;Better integration with modern IDEs&lt;/li&gt;
  &lt;li&gt;Enhanced documentation and examples&lt;/li&gt;
  &lt;li&gt;Bug fixes and performance improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;

&lt;p&gt;To create a new DukeScript project using the Maven archetypes, simply run:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    mvn archetype:generate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeGroupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;com.dukescript.archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeArtifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;knockout4j-archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeVersion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0.41
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Maven will prompt you for:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;groupId&lt;/code&gt;: Your organization’s ID (e.g., com.yourcompany)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;artifactId&lt;/code&gt;: Your project name&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;version&lt;/code&gt;: Your project version (default: 1.0-SNAPSHOT)&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;highlighter-rouge&quot;&gt;package&lt;/code&gt;: Base package for your Java classes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;available-archetypes&quot;&gt;Available Archetypes&lt;/h2&gt;

&lt;h3 id=&quot;1-knockout4j-archetype&quot;&gt;1. knockout4j-archetype&lt;/h3&gt;

&lt;p&gt;The standard archetype for creating DukeScript applications:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    mvn archetype:generate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeGroupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;com.dukescript.archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeArtifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;knockout4j-archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeVersion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0.41
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;2-crud4j-archetype&quot;&gt;2. crud4j-archetype&lt;/h3&gt;
&lt;p&gt;For creating CRUD (Create, Read, Update, Delete) applications:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    mvn archetype:generate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeGroupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;com.dukescript.archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeArtifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;crud4j-archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeVersion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0.41
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;3-visual-archetype&quot;&gt;3. visual-archetype&lt;/h3&gt;

&lt;p&gt;For applications with rich visual components:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    mvn archetype:generate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeGroupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;com.dukescript.archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeArtifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;visual-archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;-DarchetypeVersion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0.41
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;building-and-running-your-project&quot;&gt;Building and Running Your Project&lt;/h2&gt;

&lt;p&gt;After creating your project, navigate to the project directory and run:&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;nb&quot;&gt;cd &lt;/span&gt;your-project-name
    mvn clean install
    mvn &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; client/pom.xml process-classes &lt;span class=&quot;nb&quot;&gt;exec&lt;/span&gt;:exec
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This will compile your project and launch it in the default desktop browser view.&lt;/p&gt;

&lt;h2 id=&quot;multi-platform-deployment&quot;&gt;Multi-Platform Deployment&lt;/h2&gt;

&lt;p&gt;To build for different platforms:&lt;/p&gt;

&lt;h3 id=&quot;desktop-javafx&quot;&gt;Desktop (JavaFX)&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    mvn &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; client-javafx/pom.xml clean package
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;web-browser&quot;&gt;Web Browser&lt;/h3&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    mvn &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; client-web/pom.xml clean package
&lt;span class=&quot;sb&quot;&gt;``&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;### Android&lt;/span&gt;
&lt;span class=&quot;sb&quot;&gt;```&lt;/span&gt;bash
    mvn &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; client-android/pom.xml clean package
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;ios&quot;&gt;iOS&lt;/h3&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;mvn -f client-ios/pom.xml clean package
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;example-quick-hello-world&quot;&gt;Example: Quick Hello World&lt;/h2&gt;

&lt;p&gt;Here’s a simple example of what your main view model might look like:&lt;/p&gt;
&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;kn&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;com&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;example&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;net.java.html.json.Model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;net.java.html.json.Property&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;nd&quot;&gt;@Model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;className&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;HelloWorld&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;targetId&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;properties&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;nd&quot;&gt;@Property&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;message&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;})&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;HelloWorldModel&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        
        &lt;span class=&quot;kd&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;onPageLoad&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;HelloWorld&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HelloWorld&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hello from DukeScript 0.41!&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;applyBindings&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;``&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;And&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;corresponding&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;HTML:&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;````&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DOCTYPE&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DukeScript&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Hello&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;World&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;meta&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;charset&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;h1&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text: message&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;h1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;resources-and-support&quot;&gt;Resources and Support&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: &lt;a href=&quot;https://dukescript.com/documentation/&quot;&gt;https://dukescript.com/documentation/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href=&quot;https://github.com/dukescript&quot;&gt;https://github.com/dukescript&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Community Forum&lt;/strong&gt;: &lt;a href=&quot;https://dukescript.com/forum/&quot;&gt;https://dukescript.com/forum/&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Examples&lt;/strong&gt;: &lt;a href=&quot;https://github.com/dukescript/dukescript-demos&quot;&gt;https://github.com/dukescript/dukescript-demos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;migration-from-previous-versions&quot;&gt;Migration from Previous Versions&lt;/h2&gt;

&lt;p&gt;If you’re upgrading from an earlier version, update your parent POM version:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;parent&amp;gt;
    &amp;lt;groupId&amp;gt;com.dukescript&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;maven-parent&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;0.41&amp;lt;/version&amp;gt;
&amp;lt;/parent&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;DukeScript Maven Archetypes 0.41 makes it easier than ever to create cross-platform Java applications. Whether you’re building enterprise applications, mobile apps, or web services, DukeScript provides the tools you need to write once and deploy everywhere.&lt;/p&gt;

&lt;p&gt;Happy coding with DukeScript!&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;&lt;em&gt;Have questions or feedback? Join our community forum or file issues on GitHub. We’d love to hear about what you’re building with DukeScript!&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 27 Jun 2025 05:52:17 +0000</pubDate>
        <link>http://dukescript.com/update/2025/06/27/archetypes-update.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2025/06/27/archetypes-update.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Apache NetBeans 12.0 and 0.33 Archetypes</title>
        <description>&lt;p&gt;Apache &lt;a href=&quot;https://netbeans.apache.org/download/nb120/nb120.html&quot;&gt;NetBeans 12.0&lt;/a&gt;
has been released including improved Maven archetypes with better dependencies. 
Rather than using “external” wrappers around &lt;a href=&quot;http://github.com/apache/netbeans-html4j#readme&quot;&gt;HTML/Java API&lt;/a&gt;,
artifacts like&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.netbeans.html&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;boot&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.7&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;compile&lt;span class=&quot;nt&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;are used directly. Excellent simplification!&lt;/p&gt;

&lt;p&gt;As a result the &lt;a href=&quot;/update/2015/02/05/New-Version-of-Dukescript.html&quot;&gt;DukeScript Archetypes 0.33&lt;/a&gt; 
could be &lt;a href=&quot;https://github.com/dukescript/maven-archetypes/commit/c379c3b8a43126033d20e9f6bad7d79d96066f41&quot;&gt;greatly simplified&lt;/a&gt;.
The &lt;code class=&quot;highlighter-rouge&quot;&gt;pom.xml&lt;/code&gt; for the “package as NetBeans”
subproject uses NetBeans bits from &lt;code class=&quot;highlighter-rouge&quot;&gt;RELEASE120-1&lt;/code&gt; and no longer needs 
to &lt;a href=&quot;https://github.com/dukescript/maven-archetypes/commit/c379c3b8a43126033d20e9f6bad7d79d96066f41&quot;&gt;specify huge &lt;code class=&quot;highlighter-rouge&quot;&gt;exclusion&lt;/code&gt; sections&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Today’s thanks go to the NetBeans team for improving their Maven artifact dependencies!
Don’t forget to give the 0.33 Archetypes a try - &lt;a href=&quot;/update/2015/02/05/New-Version-of-Dukescript.html&quot;&gt;without&lt;/a&gt;
or &lt;a href=&quot;/getting_started.html&quot;&gt;with NetBeans&lt;/a&gt;!&lt;/p&gt;
</description>
        <pubDate>Sat, 20 Jun 2020 05:52:17 +0000</pubDate>
        <link>http://dukescript.com/update/2020/06/20/NetBeans12.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2020/06/20/NetBeans12.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>RoboVM Presenter Update in 0.32 Archetypes</title>
        <description>&lt;p&gt;Just a quick note. The &lt;a href=&quot;https://search.maven.org/artifact/com.dukescript.presenters/ios/1.7/jar&quot;&gt;RoboVM iOS presenter version 1.7&lt;/a&gt;
Maven artifact had wrong dependencies. It missed dependency on &lt;code class=&quot;highlighter-rouge&quot;&gt;org.netbeans.html:generic:1.7&lt;/code&gt; artifact.&lt;/p&gt;

&lt;p&gt;As a result the &lt;a href=&quot;/update/2020/01/20/ApacheArchetypes.html&quot;&gt;0.31 archetypes&lt;/a&gt; were
broken - &lt;strong&gt;DukeScript&lt;/strong&gt; application wasn’t able to launch with &lt;strong&gt;RoboVM&lt;/strong&gt;.
One could always fix the missing dependency manually:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-xml&quot; data-lang=&quot;xml&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.netbeans.html&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;generic&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.7&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;compile&lt;span class=&quot;nt&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Yet there is no longer need for patching the&lt;code class=&quot;highlighter-rouge&quot;&gt;client-ios/pom.xml&lt;/code&gt; by hand. The
&lt;strong&gt;RoboVM iOS&lt;/strong&gt; &lt;a href=&quot;https://search.maven.org/artifact/com.dukescript.presenters/ios/1.7.1/jar&quot;&gt;presenter version 1.7.1&lt;/a&gt; is
out. Use it instead of &lt;code class=&quot;highlighter-rouge&quot;&gt;1.7&lt;/code&gt; version.&lt;/p&gt;

&lt;p&gt;There are also 0.32 &lt;a href=&quot;(https://github.com/dukescript/maven-archetypes)&quot;&gt;Maven archetypes&lt;/a&gt; using it.
Newly generated applications are going to be correct.
Enjoy and talkback if something else isn’t working for you when using &lt;strong&gt;DukeScript&lt;/strong&gt;!&lt;/p&gt;
</description>
        <pubDate>Tue, 10 Mar 2020 23:11:42 +0000</pubDate>
        <link>http://dukescript.com/update/2020/03/10/RoboPresenterUpdate.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2020/03/10/RoboPresenterUpdate.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Using AAR dependencies in API library projects</title>
        <description>&lt;p&gt;Android uses the &lt;a href=&quot;https://developer.android.com/studio/projects/android-library.html#aar-contents&quot;&gt;AAR format&lt;/a&gt; for distributing libraries. By default Maven cannot handle
this format as a dependency type. Fortunately the &lt;a href=&quot;https://simpligility.github.io/android-maven-plugin/&quot;&gt;android-maven-plugin&lt;/a&gt;
adds some support. If you use this library you can declare dependencies like this:&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;        &lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.obt&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;sdk&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.3&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;aar&lt;span class=&quot;nt&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This works fine with some restrictions as long as your projects packaging is either AAR or APK.
It doesn’t work, when developing a cross platform API. These APIs are usually packaged as a single JAR, that contains
the implementations for all platforms, so there’s no AAR support at all. The solution to this is to add an 
extra Maven module to your project, which unpacks an AAR dependency and deploys the classes.jar
to your local repository. Here’s an example, where we take an AAR dependecy (org.apache.cordova:framework:8.1.0) 
and redeploy it:&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;project&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://maven.apache.org/POM/4.0.0&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns:xsi=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xsi:schemaLocation=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;modelVersion&amp;gt;&lt;/span&gt;4.0.0&lt;span class=&quot;nt&quot;&gt;&amp;lt;/modelVersion&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;parent&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.dukescript.api&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;bluetooth&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0-SNAPSHOT&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/parent&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;deploy-cordova-platform&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;packaging&amp;gt;&lt;/span&gt;aar&lt;span class=&quot;nt&quot;&gt;&amp;lt;/packaging&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;project.build.sourceEncoding&amp;gt;&lt;/span&gt;UTF-8&lt;span class=&quot;nt&quot;&gt;&amp;lt;/project.build.sourceEncoding&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;build&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.simpligility.maven.plugins&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;android-maven-plugin&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;4.6.0&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; 
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;extensions&amp;gt;&lt;/span&gt;true&lt;span class=&quot;nt&quot;&gt;&amp;lt;/extensions&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;executions&amp;gt;&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;unpack-dependecy&lt;span class=&quot;nt&quot;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;phase&amp;gt;&lt;/span&gt;package&lt;span class=&quot;nt&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;unpack&lt;span class=&quot;nt&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;/executions&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;c&quot;&gt;&amp;lt;!-- install  the jar --&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.maven.plugins&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;maven-install-plugin&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.5.2&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;executions&amp;gt;&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;&amp;lt;execution&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;cordova&lt;span class=&quot;nt&quot;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;phase&amp;gt;&lt;/span&gt;package&lt;span class=&quot;nt&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;goals&amp;gt;&lt;/span&gt;
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;goal&amp;gt;&lt;/span&gt;install-file&lt;span class=&quot;nt&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;                  
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;file&amp;gt;&lt;/span&gt;target/unpacked-libs/oac_framework_8.1.0/classes.jar&lt;span class=&quot;nt&quot;&gt;&amp;lt;/file&amp;gt;&lt;/span&gt;
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.cordova&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;framework&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;8.1.0&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
                            &lt;span class=&quot;nt&quot;&gt;&amp;lt;packaging&amp;gt;&lt;/span&gt;jar&lt;span class=&quot;nt&quot;&gt;&amp;lt;/packaging&amp;gt;&lt;/span&gt;
                        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
                    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/span&gt;
                &lt;span class=&quot;nt&quot;&gt;&amp;lt;/executions&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/build&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;        
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.cordova&lt;span class=&quot;nt&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;framework&lt;span class=&quot;nt&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;8.1.0&lt;span class=&quot;nt&quot;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
            &lt;span class=&quot;nt&quot;&gt;&amp;lt;type&amp;gt;&lt;/span&gt;aar&lt;span class=&quot;nt&quot;&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The android-maven-plugin provides support for unpacking the AAR, while the “maven-install-plugin”
is used to deploy it to th local repo. In our API library, we set a dependency on this 
project to establish the build order. After that we can use the dependecy from the local repository
with no extra hacks.&lt;/p&gt;

&lt;p&gt;Admittedly this is not perfect, because we’re ignoring  the extra resources that might be packaged in the AAR.
But for most dependencies it works just fine as a quick solution. An extra bonus is, that 
dependencies redeployed as JARS are recognized by IDEs like NetBeans, so you get full code completion and no 
extra error marks due to “missing” dependencies.&lt;/p&gt;

&lt;p&gt;Enjoy writing APIs with DukeScript!&lt;/p&gt;

</description>
        <pubDate>Sat, 07 Mar 2020 05:36:57 +0000</pubDate>
        <link>http://dukescript.com/best/practices/2020/03/07/aar-dependencies.html</link>
        <guid isPermaLink="true">http://dukescript.com/best/practices/2020/03/07/aar-dependencies.html</guid>
        
        
        <category>best</category>
        
        <category>practices</category>
        
      </item>
    
      <item>
        <title>Appium Integration Tests for Android</title>
        <description>&lt;p&gt;One of our customers is using DukeScript for controlling iot devices via Bluetooth Low Energy.
This works great, but it needs to be tested on multiple real devices. Emulators won’t be sufficient here, because they can’t use
Bluetooth.&lt;/p&gt;

&lt;h2 id=&quot;appium&quot;&gt;Appium&lt;/h2&gt;

&lt;p&gt;The most popular tool for integration testing on mobile devides is Appium. So in this 
project, we’re using Appium to run our integration tests on iOS and Android devices.
Since we thought that might be of interest to many of our users, we created a demo 
project to document the important steps:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/dukescript/appium-demo&quot;&gt;https://github.com/dukescript/appium-demo&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;appium-cloud&quot;&gt;Appium Cloud&lt;/h2&gt;

&lt;p&gt;As you’ll notice when you’re trying to install it first, Appium is a beast with it’s
many dependencies. Fortunately there’s several vendors who offer to run your tests 
in the cloud. So, if you don’t need to interact with real bluettoth devices, an easy 
way to get your app tested on many different devices is to use one of these “Appium Compatible Clouds”:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://aws.amazon.com/de/device-farm/&quot;&gt;AWS Device Farm&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://saucelabs.com/platform/automation-tools/appium&quot;&gt;Sauce Labs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.browserstack.com/app-automate/appium-java&quot;&gt;Browser Stack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;… and hundreds more&lt;/p&gt;

</description>
        <pubDate>Sun, 01 Mar 2020 09:57:13 +0000</pubDate>
        <link>http://dukescript.com/best/practices/2020/03/01/Android-Appium.html</link>
        <guid isPermaLink="true">http://dukescript.com/best/practices/2020/03/01/Android-Appium.html</guid>
        
        
        <category>best</category>
        
        <category>practices</category>
        
      </item>
    
      <item>
        <title>Using Gradle for Android</title>
        <description>&lt;p&gt;Here at Dukehoff we’re big fans of Maven, and for typical DukeScript applications it works just fine. 
But using Android specific libraries can be painful, because Google provides dependencies via the
 SDK instead of a repository. Also, if you’d like to use Android Studio for managing 
Icons, etc. it’s easier with Gradle.&lt;/p&gt;

&lt;p&gt;Therefore we created a little demo to get you started, where the Android 
Module uses Gradle:&lt;/p&gt;

&lt;p&gt;https://github.com/dukescript/gradle-android.git&lt;/p&gt;

&lt;p&gt;Make sure to build the project with maven first, so all the dependencies are present.
Then you can open the project in Android Studio and use all the nice Android specific features to 
develop your app, add assets, etc.&lt;/p&gt;

</description>
        <pubDate>Sat, 08 Feb 2020 11:57:13 +0000</pubDate>
        <link>http://dukescript.com/best/practices/2020/02/08/Android-Gradle.html</link>
        <guid isPermaLink="true">http://dukescript.com/best/practices/2020/02/08/Android-Gradle.html</guid>
        
        
        <category>best</category>
        
        <category>practices</category>
        
      </item>
    
      <item>
        <title>Using Apache Presenters in 0.31 Archetypes</title>
        <description>&lt;p&gt;Version 0.31 of &lt;strong&gt;DukeScript&lt;/strong&gt; Maven Archetypes is using the latest presenters
that &lt;a href=&quot;/update/2019/10/31/NetBeans_Donation.html&quot;&gt;have been donated to Apache&lt;/a&gt;
in October 2019. Generate your new (or update existing) projects
according to the 0.31 skeleton to benefit from the &lt;em&gt;Apache&lt;/em&gt; and &lt;em&gt;DukeHoff&lt;/em&gt; co-operation!&lt;/p&gt;

&lt;p&gt;The presenters are now part of &lt;strong&gt;Apache&lt;/strong&gt; NetBeans &lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/&quot;&gt;HTML/Java API 1.7&lt;/a&gt;
as following packages:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/spi/package-summary.html&quot;&gt;org.netbeans.html.presenters.spi&lt;/a&gt; - Includes the prototypical presenter based on textual protocol between JavaScript VM and Java VM.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/render/package-summary.html&quot;&gt;org.netbeans.html.presenters.render&lt;/a&gt; - Can show a browser component.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/browser/package-summary.html&quot;&gt;org.netbeans.html.presenters.browser&lt;/a&gt; - Includes generic browser presenter.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/webkit/package-summary.html&quot;&gt;org.netbeans.html.presenters.webkit&lt;/a&gt; - Provides native WebKitPresenter for smooth integration with Linux and Mac OS X.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All &lt;a href=&quot;/update/2016/12/07/New-Version-Of-Maven-Archetypes.html&quot;&gt;the archetypes&lt;/a&gt; are now
relying the
&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/spi/package-summary.html&quot;&gt;prototypical presenter&lt;/a&gt;
either directly via Apache
&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/browser/package-summary.html&quot;&gt;browser&lt;/a&gt;
and
&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/webkit/package-summary.html&quot;&gt;webkit&lt;/a&gt; presenters
or via &lt;a href=&quot;https://dukescript.com/javadoc/presenters/&quot;&gt;iOS and Android presenters&lt;/a&gt; which have also
been updated to rely on &lt;strong&gt;Apache&lt;/strong&gt; NetBeans &lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/&quot;&gt;HTML/Java API 1.7&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Simply get started via &lt;a href=&quot;/update/2015/02/05/New-Version-of-Dukescript.html&quot;&gt;the command line&lt;/a&gt; or
via &lt;em&gt;Apache NetBeans IDE&lt;/em&gt; 11.x as the &lt;a href=&quot;https://dukescript.com/getting_started.html&quot;&gt;getting started tutorial&lt;/a&gt;
shows:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-console&quot; data-lang=&quot;console&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$&lt;/span&gt; mvn archetype:generate &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;-DarchetypeGroupId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;com.dukescript.archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;-DarchetypeArtifactId&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;knockout4j-archetype &lt;span class=&quot;se&quot;&gt;\&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;-DarchetypeVersion&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;0.31&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;It is easy to &lt;a href=&quot;https://dukescript.com/getting_started.html&quot;&gt;get started with DukeScript&lt;/a&gt;
and write &lt;a href=&quot;/best/practices/2017/06/29/TranspilePlainJavaIntoJavaScript.html&quot;&gt;truly portable applications&lt;/a&gt; in Java!
Benefit from the support of the great &lt;strong&gt;Apache&lt;/strong&gt; community!&lt;/p&gt;
</description>
        <pubDate>Mon, 20 Jan 2020 11:57:13 +0000</pubDate>
        <link>http://dukescript.com/update/2020/01/20/ApacheArchetypes.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2020/01/20/ApacheArchetypes.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Dukehoff donates core DukeScript presenters to Apache NetBeans</title>
        <description>&lt;p&gt;(Munich) On October 11th 2019, Dukehoff GmbH has signed the Apache Corporate Contributor License Agreement
for a Software Grant to &lt;a href=&quot;https://incubator.apache.org/ip-clearance/netbeans-dukescript-presenters.html&quot;&gt;donate the DukeScript base presenters to Apache NetBeans&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Apache NetBeans Java/HTMLAPI allows developers to write applications in Java with
an HTML-based user interface. These applications can be deployed to any platforms 
where a &lt;a href=&quot;https://dukescript.com/javadoc/html+java/1.5.1/org/netbeans/html/boot/spi/package-summary.html&quot;&gt;presenter&lt;/a&gt; is available.&lt;/p&gt;

&lt;p&gt;The presenters provide the glue between Java and JavaScript code in such an application. 
They make sure that Java methods with JavaScriptBody annotation can properly pass 
their parameters to the JavaScript engine and receive results back. Apache NetBeans solely provides implementations for deployment on desktop via the JavaFX 
WebView and for static web pages through &lt;a href=&quot;http://wiki.apidesign.org/wiki/Bck2Brwsr&quot;&gt;bck2brwsr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Since 2015 Dukehoff GmbH has been providing &lt;a href=&quot;https://github.com/dukescript/dukescript-presenters/&quot;&gt;additional presenters&lt;/a&gt; for iOS and Android Apps,
&lt;a href=&quot;https://www.teamdev.com/jxbrowser&quot;&gt;JXBrowser&lt;/a&gt; and to multiple different 
desktop browsers as part of the &lt;a href=&quot;https://dukescript.com&quot;&gt;DukeScript project&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These commercial quality presenters are based on a common set of libraries which 
implement common generic tasks and make it easy to create new implementations. With 
this software grant Dukehoff GmbH donates the following libraries and presenters to
Apache NetBeans:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/render/package-summary.html&quot;&gt;render&lt;/a&gt; - a way to start a browser - using native GTK (on Linux and Mac OS X), AWT or CLI&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/spi/package-summary.html&quot;&gt;generic&lt;/a&gt; - ProtoPresenterBuilder &amp;amp; co. - core implementation of a presenter that handles connection between JavaScript VM and Java VM via a textual protocol - very portable&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/render/package-summary.html&quot;&gt;browser&lt;/a&gt; - uses of ProtoPresenterBuilder to start a local server and let a browser connect to it&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;http://bits.netbeans.org/html+java/1.7/org/netbeans/html/presenters/webkit/package-summary.html&quot;&gt;webkit&lt;/a&gt; - native presenter for Linux and Mac OS X that uses WebKit via JNA&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The donation has been &lt;a href=&quot;https://lists.apache.org/thread.html/3162c0f6f825e1bffc607512aaa102362dca60630b6c6113e185032a@%3Cdev.netbeans.apache.org%3E&quot;&gt;officially accepted by the Apache community&lt;/a&gt;.&lt;/p&gt;

</description>
        <pubDate>Thu, 31 Oct 2019 10:41:55 +0000</pubDate>
        <link>http://dukescript.com/update/2019/10/31/NetBeans_Donation.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2019/10/31/NetBeans_Donation.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Archetypes 0.30 Support NetBeans on JDK 11</title>
        <description>&lt;p&gt;New archetypes version 0.30 are out. They fix &lt;a href=&quot;https://issues.apache.org/jira/browse/NETBEANS-3185&quot;&gt;NETBEANS-3185&lt;/a&gt; - e.g.
one can create a DukeScript Maven project and bundle it as NetBeans application
and run it on JDK11.&lt;/p&gt;

&lt;p&gt;Thanks to Eric Barboni for releasing the necessary Maven plugins.&lt;/p&gt;
</description>
        <pubDate>Sat, 19 Oct 2019 10:41:55 +0000</pubDate>
        <link>http://dukescript.com/update/2019/10/19/ArchetypesNb111.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2019/10/19/ArchetypesNb111.html</guid>
        
        
        <category>update</category>
        
      </item>
    
      <item>
        <title>Classpath Exception for the Presenters</title>
        <description>&lt;p&gt;The presenters for &lt;strong&gt;iOS&lt;/strong&gt; as well as &lt;strong&gt;Android&lt;/strong&gt; are (&lt;em&gt;even more&lt;/em&gt;) free now! Since version 1.6
&lt;a href=&quot;https://github.com/dukescript/dukescript-presenters/commit/2f848a600825c0246f12a747b42323353620cfa9&quot;&gt;we are changing the license&lt;/a&gt;
of the presenters to &lt;em&gt;GPLv2 with Classpath Exception&lt;/em&gt; - e.g. the
same license the Java core libraries are using. That means more freedom
for the users of these presenters. The viral nature of pure GPLv2 is gone.
Use the presenters to build any applications - open source as well as commercial -
it is easy to &lt;a href=&quot;/getting_started.html&quot;&gt;get started&lt;/a&gt;:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-console&quot; data-lang=&quot;console&quot;&gt;&lt;span class=&quot;gp&quot;&gt;$&lt;/span&gt; mvn archetype:generate
&lt;span class=&quot;go&quot;&gt;       -DarchetypeGroupId=com.dukescript.archetype
       -DarchetypeArtifactId=knockout4j-archetype
       -DarchetypeVersion=0.29&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Of course you can choose from &lt;code class=&quot;highlighter-rouge&quot;&gt;crud4j-archetype&lt;/code&gt;, &lt;code class=&quot;highlighter-rouge&quot;&gt;knockout4j-archetype&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;visual-archetype&lt;/code&gt;
as usual - more at &lt;a href=&quot;https://dukescript.com/update/2015/02/05/New-Version-of-Dukescript.html&quot;&gt;getting started&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;So the presenters, as well as associated infrastructure are free for use.
Just, in case you fix something in the presenters code itself,
obey their GPLv2 license. Btw. a final teaser -
the infrastructure (e.g. generic presenter &amp;amp; co.) is under consideration to be
donated to Apache NetBeans project sometime in the (&lt;em&gt;near&lt;/em&gt;) future.&lt;/p&gt;

&lt;p&gt;Time to enjoy the freedom of HTML5 and Java!&lt;/p&gt;
</description>
        <pubDate>Tue, 13 Aug 2019 19:27:39 +0000</pubDate>
        <link>http://dukescript.com/update/2019/08/13/ClasspathException.html</link>
        <guid isPermaLink="true">http://dukescript.com/update/2019/08/13/ClasspathException.html</guid>
        
        
        <category>update</category>
        
      </item>
    
  </channel>
</rss>
