archifacts is a library to extract your architectural concepts out of your application's code

Overview

Build Maven Central License

archifacts is a free (Apache 2.0 license) library for describing and detecting architectural building blocks and their relationships in your Java applications.

archifacts heavily relies on ArchUnit which analyzes the Java bytecode. With the help of descriptors archifacts identifies building blocks, relationships and containers of your application and builds a model.

Having this model in place you can visualize your application's architecture or verify it against certain rules.

While we already have some support for the former, the latter is subject of future work.

Experimental API

Caution! archifacts is in a very early state. The API is not intended to be stable. We might introduce breaking changes at any time if we think it improves the overall user experience. Please be aware of this, if you decide to use archifacts.

Nevertheless we try to reduce the breaking changes to a minimum, but there is no guarantee.

Usage

Gradle

testImplementation 'org.archifacts:archifacts-core:0.2.0'

Maven

<dependency>
    <groupId>org.archifactsgroupId>
    <artifactId>archifacts-coreartifactId>
    <version>0.2.0version>
    <scope>testscope>
dependency>

How to get started

Take a look at our jmolecules example to get an idea about how to use archifacts.

With jbang you can even execute it directly from maven central:

jbang org.archifacts:archifacts-examples-jmolecules-spring-data-jpa:0.2.0

After executing you find a freshly generated architecture diagram in your export subfolder.

Why is it called 'archifacts'?

archifacts is a made-up word out of architects, artifacts and facts.

architects who want to visualize or verify their architecture are the main target group of the library.

Every class, interface or enum in your application is treated as an artifact. Artifact is the common base class for all these elements and therefore the foundation of archifacts.

archifacts is all about facts as the model is extracted from bytecode. With this approach archifacts tackles outdated documentation. The model contents are facts.

How can I contribute?

The most helpful contribution in this early project phase is feedback. Feedback about bugs, missing features, misconceptions, successes, whatever. We would like to get in touch with the library's users to improve archifacts.

License

ArchUnit is published under the Apache License 2.0, see http://www.apache.org/licenses/LICENSE-2.0 for details.

Comments
  • C4ModelTransformer crashes with different container descriptors delivering the same container name

    C4ModelTransformer crashes with different container descriptors delivering the same container name

    Assume I have two ArtifactContainerDescriptors, one of ArtifactContainerType A and another one of ArtifactContainerType B. Now assume that I have two classes C and D. C is described by A with the name X, D is described by B, also with name X.

    .addContainerDescriptor( new ArtifactContainerDescriptor( ) {
    	
    	@Override
    	public ArtifactContainerType type( ) {
    		return ArtifactContainerType.of( "A" );
    	}
    	
    	@Override
    	public Optional<String> containerNameOf( JavaClass javaClass ) {
    		if (javaClass.isEquivalentTo( C.class )) {
    			return Optional.of( "X" );
    		} else {
    			return Optional.empty( );
    		}
    	}
    } )
    .addContainerDescriptor( new ArtifactContainerDescriptor( ) {
    	
    	@Override
    	public ArtifactContainerType type( ) {
    		return ArtifactContainerType.of( "B" );
    	}
    	
    	@Override
    	public Optional<String> containerNameOf( JavaClass javaClass ) {
    		if (javaClass.isEquivalentTo( D.class )) {
    			return Optional.of( "X" );
    		} else {
    			return Optional.empty( );
    		}
    	}
    } )
    

    While trying to transform the resulting Application, the C4ModelTransformer will crash:

    Exception in thread "main" java.lang.IllegalArgumentException: A container named 'X' already exists for this software system. at com.structurizr.model.Model.addContainer(Model.java:213) at com.structurizr.model.SoftwareSystem.addContainer(SoftwareSystem.java:113) at org.archifacts.integration.c4.model.C4ModelTransformer.lambda$transformContainers$1(C4ModelTransformer.java:79) at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1224)

    bug clarification-needed 
    opened by nils-christian 7
  • provide example/info on how to render the generated artifacts

    provide example/info on how to render the generated artifacts

    I get a .txt and .adoc file - the .txt seem to be xml and the .adoc doesn't render anything but a raw text block when using asciidoctor export/jmolecules-spring-data-jpa-example.adoc.

    Little bit of info would be good here.

    opened by maxandersen 7
  • Change the component names in the C4ModelTransformer

    Change the component names in the C4ModelTransformer

    Also regarding #9 and #19 I wonder if one shouldn't be able to change the component names during the transformation process. Currently always the simple name of the component it used. This is fine for smaller projects, but in larger projects we get ambiguity. For instance, it would be nice if one could choose to use the FQN with the "short" package names (e.g., d.e.MyComponent for de.example.MyComponent).

    opened by nils-christian 5
  • Standardize behaviour with null parameters

    Standardize behaviour with null parameters

    As discussed in #34, we should standardize the behaviour of methods/constructors/etc. when it comes to null parameters. In some cases we throw a NullPointerException, in some other cases an IllegalArgumentException. I prefer Objects.requireNonNull, but only because it allows to perform assigment and validation in a single line. If we want to throw an IllegalArgumentException instead, we should probably add/use a util method for this.

    opened by nils-christian 4
  • Add order/priority for descriptors

    Add order/priority for descriptors

    As stated by @OLibutzki in PR #29 some kind of order/priority for the descriptors would be useful. I had the same thought while writing some of the descriptors. The easiest way would probably be a getOrder method returning an Integer (default 0). If multiple descriptors match, the order would be used to resolve the tie (lower order wins). Only if two descriptors match the same JavaClass and both return the same value, an exception would be thrown.

    enhancement 
    opened by nils-christian 3
  • Provide descriptors for Axon Framework

    Provide descriptors for Axon Framework

    We should introduce a module which contains descriptors for the axon framework, esspecially regaring Events, Commands and queries and the artifacts which send/publish them and the artifacts which handle them.

    Identifying handing components is easy due to the correspoding annotations. Detecting sending/publishing is harder. An option is a heuristic that says: Whenever an event, a command or a query is built/instaniated, it will be sent, so we could scann the application for those building blocks to be instantiated and treat that as the source of a certain relationship.

    How to detect that a buidling block instantiated: The constructor is called or a static method of the building block's class is called which returns a building block instance (factory method) might be a good starting point.

    enhancement 
    opened by OLibutzki 3
  • Provide alternatives to writing the documentation into a file

    Provide alternatives to writing the documentation into a file

    While writing the documentation (like in the AsciiDoc class) into a file is probably often sufficient, it is still pretty limited. Maybe other output methods (stream, string, ...) should be considered or even separate the "serialization" of the documentation completely from the actual documentation.

    enhancement 
    opened by nils-christian 3
  • Bump structurizr-export from 1.3.0 to 1.7.0

    Bump structurizr-export from 1.3.0 to 1.7.0

    Bumps structurizr-export from 1.3.0 to 1.7.0.

    Release notes

    Sourced from structurizr-export's releases.

    v1.7.0

    • Adds the ability to export a diagram legend when using the StructurizrPlantUMLExporter.
    • Adds support for icons to the StructurizrPlantUMLExporter (HTTP/HTTPS icon URLs only).

    v1.6.1

    • Fixes #15 (PlantUML export fails when element names are Unicode characters)
    • Fixes an issue with the last character of workspace exports being stripped.

    v1.6.0

    • com.structurizr.export.DiagramExporter and com.structurizr.export.WorkspaceExporter can now be implemented to build custom exporters, for use with the Structurizr CLI export command.
    • Resolves #2 (Allow to export properties to C4Plantuml files).
    • Resolves #8 (fixes the rendering of infrastructure nodes in C4-PlantUML deployment diagrams).
    • Resolves #17 (tags are no longer included by default in the C4-PlantUML export, and can be configured via a view set property named c4plantuml.tags).

    v1.5.0

    • Adds support for relationship colours in the Ilograph export.
    • Adds support for the new relationship line style property.
    • Adds support for Mermaid sequence diagrams (#6).
    • Adds support for custom views and elements.

    v1.4.0

    • Package change from com.structurizr.io to com.structurizr.export.
    • Fixes #4 (Remove sequence numeration from messages in PlantUML Sequence diagrams for dynamic views).
    Changelog

    Sourced from structurizr-export's changelog.

    1.7.0 (3rd October 2022)

    • Adds the ability to export a diagram legend when using the StructurizrPlantUMLExporter.
    • Adds support for icons to the StructurizrPlantUMLExporter (HTTP/HTTPS icon URLs only).

    1.6.1 (9th September 2022)

    • Fixes #15 (PlantUML export fails when element names are Unicode characters)
    • Fixes an issue with the last character of workspace exports being stripped.

    1.6.0 (15th August 2022)

    • com.structurizr.export.DiagramExporter and com.structurizr.export.WorkspaceExporter can now be implemented to build custom exporters, for use with the Structurizr CLI export command.
    • Resolves #2 (Allow to export properties to C4Plantuml files).
    • Resolves #8 (fixes the rendering of infrastructure nodes in C4-PlantUML deployment diagrams).
    • Resolves #17 (tags are no longer included by default in the C4-PlantUML export, and can be configured via a view set property named c4plantuml.tags).

    1.5.0 (30th March 2022)

    • Adds support for relationship colours in the Ilograph export.
    • Adds support for the new relationship line style property.
    • Adds support for Mermaid sequence diagrams (#6).
    • Adds support for custom views and elements.

    1.4.0 (20th February 2022)

    • Package change from com.structurizr.io to com.structurizr.export.
    • Fixes #4 (Remove sequence numeration from messages in PlantUML Sequence diagrams for dynamic views).
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • TableDocElement shouldn't render anything if the items are empty

    TableDocElement shouldn't render anything if the items are empty

    If the items of the TableDocElement are empty, the table shouldn't render anything. Alternatively, it should be configurable whether an empty table should still be rendered (default: false).

    enhancement good first issue 
    opened by nils-christian 2
  • Add an AsciiDocElement for tables

    Add an AsciiDocElement for tables

    While generating an architecture documentation for our application, we noticed that it was often useful to list certain elements in tables. It would be nice if archifacts-asciidoc would provide a simple implementation for a table. I was thinking about an extendable single-column table with a generic and a label extractor function. Another default implementation could extend it and display Named elements.

    public class TableDocElement<T> {
    
      public TableDocElement(final String label, final Iterable<T> elements, final Function<T, String> labelExtractor) {...}
      
    }
    
    public final class NamedDocElement<T extends Named> extends TableDocElement<T> {
      ...  
    }
    

    We should of course extend the example with such a table.

    enhancement 
    opened by nils-christian 2
  • Extend ArtifactContainer with methods to query for relationships

    Extend ArtifactContainer with methods to query for relationships

    While the application class has a method to query relationships of a certain role, the ArtifactContainer does not. It would be nice if one could query the container for incoming/outgoing relationships of a certain role.

    enhancement good first issue 
    opened by nils-christian 2
  • Bump axon.version from 4.6.2 to 4.6.3

    Bump axon.version from 4.6.2 to 4.6.3

    Bumps axon.version from 4.6.2 to 4.6.3. Updates axon-messaging from 4.6.2 to 4.6.3

    Release notes

    Sourced from axon-messaging's releases.

    Axon Framework v4.6.3

    :chart_with_upwards_trend: Enhancements

    • Proposed changes to caching saga fix #2532
    • Allow usage of specific serializers for the JpaDLQ #2486

    :beetle: Bug Fixes

    • Ensure default TrackingEventProcessorConfiguration is taken into account for Sagas #2533
    • Saga Caching Enhancements #2531
    • Cancel of direct query #2528
    • #2514 Fix naming of registered Repository and AggregateFactory beans #2525
    • Fix caching mechanism for Sagas #2517
    • Wrong Spring repository bean name when using aggregate polymorphism #2514
    • SpringAxonAutoConfigurer warns about multiple beans defined for polymorphic aggregates. #2512
    • Roll back slf4j to major version 1 #2497
    • DeadLetterQueue uses wrong Serializer to (de)serialize Tokens #2485
    • Adhere to expected Exception Handler invocation order #2483
    • #2481 Check MessageHandlerRegistrar registration to be non-null #2482
    • NullPointerException on Shutdown without Start #2481

    :hammer_and_wrench: Dependency Upgrade

    • Bump spring.boot.version from 2.7.6 to 2.7.7 #2529
    • Bump byte-buddy.version from 1.12.19 to 1.12.20 #2523
    • Bump projectreactor.version from 3.4.25 to 3.4.26 #2513
    • Bump spring.boot.version from 2.7.5 to 2.7.6 #2505
    • Bump byte-buddy.version from 1.12.18 to 1.12.19 #2496
    • Bump slf4j.version from 2.0.3 to 2.0.4 #2495
    • Bump micrometer-core from 1.9.5 to 1.9.6 #2493
    • Bump spring-framework-bom from 5.3.23 to 5.3.24 #2492
    • Bump testcontainers.version from 1.17.5 to 1.17.6 #2491
    • Bump projectreactor.version from 3.4.24 to 3.4.25 #2489

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Commits
    • 7f93e00 [maven-release-plugin] prepare release axon-4.6.3
    • 0881004 Merge pull request #2528 from AxonFramework/bug/cancel-axon-server-query
    • 1746fb7 Merge pull request #2531 from AxonFramework/enhancement/caching-saga-it
    • 856b880 Merge pull request #2533 from AxonFramework/bug/default-tep-config-sagas
    • f660c8c Remove redundant import
    • 7670f34 Ensure a default TEP config is used for Sagas
    • 9cf9d45 Adjust indentation
    • 702eb1a Replace await-call for assertTrue
    • 8d272a7 Increase timeouts for resiliency
    • 3aceaf4 Adjust solution in EntryListenerValidator
    • Additional commits viewable in compare view

    Updates axon-eventsourcing from 4.6.2 to 4.6.3

    Release notes

    Sourced from axon-eventsourcing's releases.

    Axon Framework v4.6.3

    :chart_with_upwards_trend: Enhancements

    • Proposed changes to caching saga fix #2532
    • Allow usage of specific serializers for the JpaDLQ #2486

    :beetle: Bug Fixes

    • Ensure default TrackingEventProcessorConfiguration is taken into account for Sagas #2533
    • Saga Caching Enhancements #2531
    • Cancel of direct query #2528
    • #2514 Fix naming of registered Repository and AggregateFactory beans #2525
    • Fix caching mechanism for Sagas #2517
    • Wrong Spring repository bean name when using aggregate polymorphism #2514
    • SpringAxonAutoConfigurer warns about multiple beans defined for polymorphic aggregates. #2512
    • Roll back slf4j to major version 1 #2497
    • DeadLetterQueue uses wrong Serializer to (de)serialize Tokens #2485
    • Adhere to expected Exception Handler invocation order #2483
    • #2481 Check MessageHandlerRegistrar registration to be non-null #2482
    • NullPointerException on Shutdown without Start #2481

    :hammer_and_wrench: Dependency Upgrade

    • Bump spring.boot.version from 2.7.6 to 2.7.7 #2529
    • Bump byte-buddy.version from 1.12.19 to 1.12.20 #2523
    • Bump projectreactor.version from 3.4.25 to 3.4.26 #2513
    • Bump spring.boot.version from 2.7.5 to 2.7.6 #2505
    • Bump byte-buddy.version from 1.12.18 to 1.12.19 #2496
    • Bump slf4j.version from 2.0.3 to 2.0.4 #2495
    • Bump micrometer-core from 1.9.5 to 1.9.6 #2493
    • Bump spring-framework-bom from 5.3.23 to 5.3.24 #2492
    • Bump testcontainers.version from 1.17.5 to 1.17.6 #2491
    • Bump projectreactor.version from 3.4.24 to 3.4.25 #2489

    :heart: Contributors

    We'd like to thank all the contributors who worked on this release!

    Commits
    • 7f93e00 [maven-release-plugin] prepare release axon-4.6.3
    • 0881004 Merge pull request #2528 from AxonFramework/bug/cancel-axon-server-query
    • 1746fb7 Merge pull request #2531 from AxonFramework/enhancement/caching-saga-it
    • 856b880 Merge pull request #2533 from AxonFramework/bug/default-tep-config-sagas
    • f660c8c Remove redundant import
    • 7670f34 Ensure a default TEP config is used for Sagas
    • 9cf9d45 Adjust indentation
    • 702eb1a Replace await-call for assertTrue
    • 8d272a7 Increase timeouts for resiliency
    • 3aceaf4 Adjust solution in EntryListenerValidator
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump structurizr-export from 1.7.0 to 1.8.1

    Bump structurizr-export from 1.7.0 to 1.8.1

    Bumps structurizr-export from 1.7.0 to 1.8.1.

    Release notes

    Sourced from structurizr-export's releases.

    v1.8.1

    • Updated dependencies.

    v1.8.0

    • The C4-PlantUML export now mimics how the Structurizr renderer uses tags when a view set or view property named c4plantuml.tags is set to true.
    • Fixes #24 (plantuml.sequenceDiagrams changes the export of static diagrams).
    • Adds the ability to configure the PlantUML exports via properties on the view set or view (#22).
    • Renamed plantuml.legend to c4plantuml.legend.
    • Renamed plantuml.sequenceDiagrams to plantuml.sequenceDiagram.
    • Adds a view/view set property named c4plantuml.stereotypes that can be used to enable/disable stereotypes (these are always on by default when the legend is not shown; #29).
    • Adds a c4plantuml.stdlib view/view set property to allow users to choose which version of C4-PlantUML should be used (built-in standard library, or GitHub).
    • Fixes an issue with relationship properties not showing when c4plantuml.relationshipProperties is set to true.
    • Fixes #35 (Dark mode interfaces not well supported by Mermaid exporter).
    • Adds a mermaid.title property that can be used to enable/disable diagram titles.
    • Renamed mermaid.sequenceDiagrams to mermaid.sequenceDiagram.
    Changelog

    Sourced from structurizr-export's changelog.

    1.8.1 (23rd December 2022)

    • Updated dependencies.

    1.8.0 (21st December 2022)

    • The C4-PlantUML export now mimics how the Structurizr renderer uses tags when a view set or view property named c4plantuml.tags is set to true.
    • Fixes #24 (plantuml.sequenceDiagrams changes the export of static diagrams).
    • Adds the ability to configure the PlantUML exports via properties on the view set or view (#22).
    • Renamed plantuml.legend to c4plantuml.legend.
    • Renamed plantuml.sequenceDiagrams to plantuml.sequenceDiagram.
    • Adds a view/view set property named c4plantuml.stereotypes that can be used to enable/disable stereotypes (these are always on by default when the legend is not shown; #29).
    • Adds a c4plantuml.stdlib view/view set property to allow users to choose which version of C4-PlantUML should be used (built-in standard library, or GitHub).
    • Fixes an issue with relationship properties not showing when c4plantuml.relationshipProperties is set to true.
    • Fixes #35 (Dark mode interfaces not well supported by Mermaid exporter).
    • Adds a mermaid.title property that can be used to enable/disable diagram titles.
    • Renamed mermaid.sequenceDiagrams to mermaid.sequenceDiagram.
    Commits
    • e7104df Updated dependencies.
    • 2e07427 Updated README.
    • 1828d27 Updated release date.
    • c01b8fd Fix test.
    • 9d4cbe0 Updated changelog.
    • 631f598 Added docs for Mermaid properties, renamed mermaid.sequenceDiagrams to `mer...
    • 8266bf0 Adds a mermaid.title property that can be used to enable/disable diagram ti...
    • 27743c2 Fixes #35.
    • 8b8e33c Fixes an issue with relationship properties not showing when `c4plantuml.rela...
    • 86a910d Adds a c4plantuml.stdlib view/view set property to allow users to choose wh...
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump spring-boot-dependencies from 2.7.6 to 3.0.1

    Bump spring-boot-dependencies from 2.7.6 to 3.0.1

    Bumps spring-boot-dependencies from 2.7.6 to 3.0.1.

    Release notes

    Sourced from spring-boot-dependencies's releases.

    v3.0.1

    :lady_beetle: Bug Fixes

    • Fix typo in LocalDevToolsAutoConfiguration logging #33615
    • No warning is given when <springProfile> is used in a Logback <root> block #33610
    • Auto-configure PropagationWebGraphQlInterceptor for tracing propagation #33542
    • WebClient instrumentation fails with IllegalArgumentException when adapting to WebClientExchangeTagsProvider #33483
    • Reactive observation auto-configuration does not declare order for WebFilter #33444
    • Web server fails to start due to "Resource location must not be null" when attempting to use a PKCS 11 KeyStore #33433
    • Actuator health endpoint for neo4j throws NoSuchElementException and always returns Status.DOWN #33428
    • Anchors in YAML configuration files throw UnsupportedOperationException #33404
    • ZipkinRestTemplateSender is not customizable #33399
    • AOT doesn't work with Logstash Logback Encoder #33387
    • Maven process-aot goal fails when release version is set in Maven compiler plugin #33382
    • DependsOnDatabaseInitializationPostProcessor re-declares bean dependencies at native image runtime #33374
    • @SpringBootTest now throws a NullPointerException rather than a helpful IllegalStateException when @SpringBootConfiguration is not found #33371
    • bootBuildImage always trys to create a native image due to bootJar always adding a META-INF/native-image/argfile to the jar #33363

    :notebook_with_decorative_cover: Documentation

    • Improve gradle plugin tags documentation #33617
    • Improve maven plugin tags documentation #33616
    • Fix typo in tomcat accesslog checkExists doc #33512
    • Documented Java compiler level is wrong #33505
    • Fix typo in documentation #33453
    • Update instead of replace environment in bootBuildImage documentation #33424
    • Update the reference docs to document the need to declare the native-maven-plugin when using buildpacks to create a native image #33422
    • Document that the shutdown endpoint is not intended for use when deploying a war to a servlet container #33410
    • Reinstate GraphQL testing documentaion #33407
    • Description of NEVER in Sanitize Sensitive Values isn't formatted correctly #33398

    :hammer: Dependency Upgrades

    • Upgrade to AspectJ 1.9.19 #33586
    • Upgrade to Byte Buddy 1.12.20 #33587
    • Upgrade to Couchbase Client 3.4.1 #33588
    • Upgrade to Dropwizard Metrics 4.2.14 #33589
    • Upgrade to Elasticsearch Client 8.5.3 #33590
    • Upgrade to Hibernate 6.1.6.Final #33591
    • Upgrade to HttpClient 4.5.14 #33592
    • Upgrade to HttpCore 4.4.16 #33593
    • Upgrade to Infinispan 14.0.4.Final #33594
    • Upgrade to Jaybird 4.0.8.java11 #33595
    • Upgrade to Jetty 11.0.13 #33596
    • Upgrade to jOOQ 3.17.6 #33597
    • Upgrade to Kotlin 1.7.22 #33598
    • Upgrade to Lettuce 6.2.2.RELEASE #33599
    • Upgrade to MongoDB 4.8.1 #33600
    • Upgrade to MSSQL JDBC 11.2.2.jre17 #33601
    • Upgrade to Native Build Tools Plugin 0.9.19 #33602

    ... (truncated)

    Commits
    • 837947c Release v3.0.1
    • 5929d95 Merge branch '2.7.x'
    • b10b788 Next development version (v2.7.8-SNAPSHOT)
    • f588793 Update copyright year of changed files
    • 0254619 Merge branch '2.7.x'
    • e4772cf Update copyright year of changed files
    • 2e7ca6f Warning if <springProfile> is used in phase 2 model elements
    • 2ed512d Use model.deepMarkAsSkipped in SpringProfileModelHandler
    • 532fed3 Increase couchbase connection timeout for tests
    • 9562a2c Merge branch '2.7.x'
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump structurizr-core from 1.16.1 to 1.16.2

    Bump structurizr-core from 1.16.1 to 1.16.2

    Bumps structurizr-core from 1.16.1 to 1.16.2.

    Release notes

    Sourced from structurizr-core's releases.

    v1.16.2

    • Updated dependencies.
    Changelog

    Sourced from structurizr-core's changelog.

    1.16.2 (22nd December 2022)

    • Upgraded dependencies.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Add possibility to represent modules as C4 Components

    Add possibility to represent modules as C4 Components

    archifacts models modules of a monolith as containers. Due to this converation with @simonbrowndotje they should be modelled as components.

    Unfortunately, the Structurizr Java API is limited and does not provide all the features we need to model modules as components appropriately.

    As an alternative we could think about generating PlantUML directly using the C4-PlantUML-Stdlib or generating Structurizr DSL Code.

    At first glance the DSL approach seems to be the better choice as it abstracts from the concrete technology (PlantUML).

    It seems to be possible to parse the generated DSL files using StructurizrDslParser.

    As part of this issue it should be possible to decide how modules should be represented in the C4 model. archifacts should support representing them as containers (distributed system) or components (modular monolith).

    opened by OLibutzki 3
  • Relationship classification for JMolecule depends on building block descriptors

    Relationship classification for JMolecule depends on building block descriptors

    While writing test cases for the JMolecules integration (PR #35), I noticed that the relationships depend on the building block descriptors. This leads to the rather unexpected behaviour that the relationships are only classified correctly if and only if the dependent block descriptors are used as well. This can be seen in the new test case assertThat_source_based_artifact_relationship_descriptor_are_recognized which has to register two block descriptors. If one comments those two lines out, the test fails.

    enhancement 
    opened by nils-christian 2
Releases(v0.4.0)
  • v0.4.0(Nov 16, 2022)

    What's Changed

    • This is a maintenance release whose primary focus is on updating the third-party libraries. First and foremost, ArchUnit 1.0.0 is now officially supported.

    Breaking changes

    • Due to the update to structurizr-export the package names changed from com.structurizr.io to com.structurizr.export.

    Full Changelog: https://github.com/archifacts/archifacts/compare/v0.3.0...v0.4.0

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Jan 22, 2022)

    What's Changed

    • The API to create a C4 model has been refactored and extended
    • ApplicationBuilder just provides a single descriptor method instead of having specific methods for each descriptor
    • Bugfixes
    • The examples based on jBang and jmolecules-jpa have been removed as there a advanced examples available (Fraktalio and Spring Restbucks)
    • Multiple dependency updates

    Full Changelog: https://github.com/archifacts/archifacts/compare/v0.2.0...v0.3.0

    Source code(tar.gz)
    Source code(zip)
Generate Heroku-like random names to use in your Java applications

HaikunatorJAVA Generate Heroku-like random names to use in your java applications. Installation To install Haikunator add the following to your maven

Atrox 29 Aug 28, 2022
Diff Utils library is an OpenSource library for performing the comparison / diff operations between texts or some kind of data: computing diffs

Diff Utils library is an OpenSource library for performing the comparison / diff operations between texts or some kind of data: computing diffs, applying patches, generating unified diffs or parsing them, generating diff output for easy future displaying (like side-by-side view) and so on.

null 951 Jan 5, 2023
A tool ot export, analyse and visualize your transactions, rewards and commissions of your liquidity mining pools or DEX transactions

A tool ot export, analyse and visualize your transactions, rewards and commissions of your liquidity mining pools or DEX transactions.

Adam·Michael 15 Mar 11, 2022
An open-source Java library for Constraint Programming

Documentation, Support and Issues Contributing Download and installation Choco-solver is an open-source Java library for Constraint Programming. Curre

null 607 Jan 3, 2023
Java rate limiting library based on token/leaky-bucket algorithm.

Java rate-limiting library based on token-bucket algorithm. Advantages of Bucket4j Implemented on top of ideas of well known algorithm, which are by d

Vladimir Bukhtoyarov 1.7k Jan 8, 2023
A Java library for designing good error messages

JDoctor, a Java library for good error messages Designing good error messages is hard. In Java, most often, developers just rely on throwing exception

Cédric Champeau 125 Oct 24, 2022
Discord4J is a fast, powerful, unopinionated, reactive library to enable quick and easy development of Discord bots for Java, Kotlin, and other JVM languages using the official Discord Bot API.

Discord4J is a fast, powerful, unopinionated, reactive library to enable quick and easy development of Discord bots for Java, Kotlin, and other JVM languages using the official Discord Bot API.

null 1.5k Jan 4, 2023
Ta4j is an open source Java library for technical analysis

Ta4j is an open source Java library for technical analysis. It provides the basic components for creation, evaluation and execution of trading strategies.

null 1.7k Dec 31, 2022
hella-html is a library that makes it hella easy to generate dynamic HTML in vanilla Java.

Hella easy HTML in Java hella-html is a library that makes it hella easy to generate dynamic HTML in vanilla Java. Very lightweight and fast, the prim

null 1 Nov 23, 2022
documents4j is a Java library for converting documents into another document format

documents4j is a Java library for converting documents into another document format. This is achieved by delegating the conversion to any

documents4j 455 Dec 23, 2022
java common utils library

java-common-utils java common utils library 一个简单的Java通用工具类,目前的设想,包括简化异常处理工具、简易限流处理工具等 ExceptionHandler, 目标简化try catch的代码冗余度

xuangy 2 Jan 21, 2022
A Java API for checking if text contains profanity via the alt-profanity-checker Python library.

ProfanityCheckerAPI A Java API for checking if text contains profanity via the alt-profanity-checker Python library. It uses jep to run and interpret

William 2 Feb 19, 2022
High performance I/O library for Java using io_uring under the hood

nio_uring nio_uring is an I/O library for Java that uses io_uring under the hood, which aims to be: A simple and flexible API Super fast and efficient

Blake Beaupain 65 Dec 18, 2022
Manage your Java environment

Master your Java Environment with jenv Website : http://www.jenv.be Maintainers : Gildas Cuisinier Future maintainer in discussion: Benjamin Berman As

jEnv 4.6k Dec 30, 2022
A simple figura api extention that allow you to change your avatar, or upload it with script

A simple figura api extention that allow you to change your avatar, or upload it with script

null 4 Apr 14, 2022
To quickly integrate your applications into the EdgeGallery platform, we provide the toolchain project to help developers quickly modify code and migrate applications to the platform.

Toolchain 工具链 工具链是MEC Developer开发者平台中的一个重要特性,当x86平台的App想要上车ARM平台时,底层的代码不可避免的需要进行修改或重写。 App提供者可以通过MEC Developer开发者平台中集成的工具链进行源代码分析,定位需要修改的源代码并根据指导意见进行修

EdgeGallery 19 Jan 7, 2022
Working sample code for the basic concepts in Minecraft and Forge.

Working sample code for the basic concepts in Minecraft and Forge.

null 1.2k Dec 31, 2022
Extract tables from PDF files

tabula-java tabula-java is a library for extracting tables from PDF files — it is the table extraction engine that powers Tabula (repo). You can use t

Tabula 1.5k Jan 9, 2023
Extract text from a PDF (pdf to text). Api for PHP/JS/Python and others.

Extract text from a PDF (pdf to text). API in docker. Why did we create this project? In the Laravel project, it was necessary to extract texts from l

dotcode.moscow 6 May 13, 2022
A Flutter plugin to extract waveform data from an audio file suitable for visual rendering.

just_waveform This plugin extracts waveform data from an audio file that can be used to render waveform visualisations. Usage final progressStream = J

null 53 Dec 4, 2022